Opcjonalna autentykacja w laravel passport

Odpowiedz Nowy wątek
2018-08-08 19:25
0

Chciałbym zrobić routa z opcjonalną autentykacją, żeby wyświetlić na stronie głównej różne elementy w zależności od tego czy i kto jest zalogowany. Wszystkie tutoriale, które znajduję jakby pomijają taką potrzebę. Czy mógłby ktoś podpowiedzieć jak to zrobić?

Robiłem według tego tutoriala: https://medium.com/modulr/cre[...]rt-of-laravel-5-6-1dc2d400a7f
Tutaj cały mój kod: https://github.com/team9lipca[...]s-service/tree/pierwsze-prace

Kiedy dobijam się przez postmana do api/auth/user z tokenem to dostaję jsona z userem. Jeżeli nie podam tokena to dostaję html ze stroną logowania (też nie wiem gdzie jest przekierowanie).

W internecie piszą, żeby zmienić middleware z api na web, ale wtedy dostaję pustego jsona niezależnie czy podam token czy nie. Routy po zmianach:

<?php
Route::group([
    'namespace' => 'Auth',
    'middleware' => 'api',
    'prefix' => 'auth'
], function () {
    Route::post('login', '[email protected]');
    Route::post('signup', '[email protected]');
    Route::get('signup/activate/{token}', '[email protected]');
    Route::group([
        'middleware' => 'auth:api'
    ], function() {
        Route::get('logout', '[email protected]');
    });
});
 
Route::group([
    'namespace' => 'Auth',
    'middleware' => 'web',
    'prefix' => 'auth'], function () {
    Route::get('user', '[email protected]');
});
edytowany 1x, ostatnio: furious programming, 2018-08-08 19:32
Uwierzytelnianie. Nie ma w języku polskim takiego słowa jak autentykacja. - Patryk27 2018-08-08 19:27

Pozostało 580 znaków

2018-08-08 19:28
0

Aby coś takiego osiągnąć powinieneś utworzyć jeden route (bez middleware auth) i w kontrolerze wołać Auth::check(), aby sprawdzić, czy użytkownik jest zalogowany,

Np.:

class MyController {
 
  public function index(): array { 
    if (Auth::check()) {
      return [ /* dane dla zalogowanego użytkownika */ ];
    } else {
      return [ /* dane dla niezalogowanego użytkownika */ ];
    }
  }
 
}

edytowany 1x, ostatnio: Patryk27, 2018-08-08 19:28

Pozostało 580 znaków

2018-08-08 19:45
0

Dodałem taki route w web.php, sprawdziłem adres /test, ale pusto. Przeniosłem do api.php i sprawdziłem adres /api/test i to samo.

Route::get('/test', function () {
    return Auth::user();
})->name('test'));
 

Ale mam już rozwiązanie. W kodzie z tutoriala jest nałożony podwójny middleware - api i auth:api. Ustawiłem dla pożądanego routa sam "auth:api" i jest ok.
Ale fajnie jakby ktoś wytłumaczył dlaczego tak się dzieje

Jednak nie działa. Przy zalogowanym zwraca usera, ale przy niezalogowanym dostaję "message: unathorized", które nie wiem skąd właściwie pochodzi.

Może byłby ktoś w stanie wygenerować prosty projekt z jedną taką ścieżką, z domyślnym passportowym uwierzytelnianiem? Mogę nawet zapłacić.

Nadal nie mogę znaleźć rozwiązania. Czy moje podejście do projektowania API jest jakieś błędne, albo niezgodne z zasadami REST, SOLID itp.?

edytowany 6x, ostatnio: furious programming, 2018-08-10 16:53

Pozostało 580 znaków

2018-08-10 16:42
0

możesz wykorzystać rodzyna z ver. 5.5 auth/guest
https://arjunphp.com/laravel-[...]-blade-directives-auth-guest/


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0