Подтвердить что ты не робот

Как использовать аутентификацию на токенах на веб-странице laravel

Я пытаюсь использовать JWT для веб-страницы laravel вместо сеанса. поэтому я внес некоторые изменения.

  • Установлен jwt-auth и настроить

  • Затем изменил защиту по умолчанию как api в config/auth.php

    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],
    
    'guards' => [
        ...
    
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],
    

Теперь я получаю сообщение об ошибке

(1/1) FatalErrorException Вызов метода undefinedIlluminate\Auth\TokenGuard:: попытка() в AuthenticatesUsers.php(строка 75)

Как исправить это и запустить аутентификацию на токенах для веб-страницы laravel (лезвия, а не API).

4b9b3361

Ответ 1

Я нашел решение здесь: https://github.com/tymondesigns/jwt-auth/issues/860

В/routes/api.php - добавлено несколько основных маршрутов аутентификации

Route::post('login', 'Auth\[email protected]');

Route::get('/user', function (Request $request) {
    $user = $request->user();
    return dd($user);
})->middleware('auth:api');

В/app/http/Controller/auth/LoginController.php

а затем переопределить методы в login contoller

public function login(Request $request)
{
    $credentials = $request->only(["email","password"]);
    if ($token = $this->guard()->attempt($credentials)) {
        return $this->sendLoginResponse($request, $token);
    }

    $this->incrementLoginAttempts($request);
    return $this->sendFailedLoginResponse($request);
}

protected function sendLoginResponse(Request $request, $token)
{
    $this->clearLoginAttempts($request);

    return $this->authenticated($request, $this->guard()->user(), $token);
}

protected function authenticated(Request $request, $user, $token)
{
    setcookie("jwt_token", $token);
    return redirect('/');
    return response()->json([
        'token' => $token,
    ]);
}

protected function sendFailedLoginResponse(Request $request)
{
    return response()->json([
        'message' => "not found",
    ], 401);
}

Добавление промежуточного программного обеспечения AddToken

public function handle($request, Closure $next)
{
    $token = isset($_COOKIE["jwt_token"])?$_COOKIE["jwt_token"]:"";
    //$request['token'] = $token;//this is working
    $request->headers->set("Authorization", "Bearer $token");//this is working
    $response = $next($request);
    //$response->header('header name', 'header value');
    return $response;
}

Зарегистрировать промежуточное ПО в Kernel.php

 protected $middleware = [
    ....
    \App\Http\Middleware\AddToken::class,
];

Ответ 2

Я также использую jwt для защиты нашего api. Вы должны изменить свою конфигурацию, как показано ниже:

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

'guards' => [
    ...

    'api' => [
        'driver' => 'jwt', // KEY POINT!!!
        'provider' => 'users',
    ],
],

Убедитесь, что библиотека jwt установлена ​​правильно:

  • Tymon\JWTAuth\Providers\LaravelServiceProvider:: класс добавляется в ваш config/app.php.

  • Ваша модель пользователя реализует интерфейс JWTSubject, если вы используете в своем провайдере красноречивую модель.

Ответ 3

Laravel использует аутентификацию по умолчанию, основанную на сеансах, из окна с по умолчанию для пользователя-view-controller, который у вас уже есть. У вас есть дополнительные средства для добавления собственного настраиваемого защитника в документе, поэтому вы можете использовать защитник по мере необходимости.

Поэтому, как предлагалось @KevinPatel, вернитесь к настройке по умолчанию, затем в своем маршруте: сгруппируйте маршрут, который вы хотите под аутентификацией JWT, добавьте JWTMiddleware, в этом случае вам необходимо обновить контроллер, ответственный за вашу аутентификацию, используйте JWTAuth вместо стандартного auth.

Вы должны проверить этот ответ, если вам нужно его лучше понять. этот ответ на Laracasts

Один рекомендуемый способ включить JWTAuth - перейти Dingo API (конечно, вы не создаете api, но), потому что Dingo уже добавило некоторую плоть в аутентификацию и управление другими маршрутами - так что все довольно легко использовать и настраивать

Ответ 4

Я думаю, вы можете попробовать следующее:

'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],

ИЗМЕНИТЬ

Вы можете найти некоторую помощь от шаг за шагом. В этом примере вам нужно сосредоточиться на том, как настроить и использовать эту аутентификацию на основе токенов.

Надеюсь, вам это поможет.

Ответ 5

Пожалуйста, обратитесь к этой ссылке. Если вы используете api по умолчанию, тогда аутентификация laravel вызовет ошибку.