Laravel: ошибка при реализации аутентификации JWT - PullRequest
0 голосов
/ 15 марта 2020

Я испытываю ошибку при попытке опубликовать API через Postman для аутентификации пользователей на сайте.

функция входа в систему:

    public function login(Request $request)
    {

     $credentials = $request->only('email', 'password');

     if ($token = $this->guard()->attempt($credentials)) {
        return $this->respondWithToken($token);
     }
     return response()->json(['error' => 'Unauthorized'], 401);

  }

функция защиты

  public function guard()
  {
   return Auth::guard();
  }

Ошибка, показанная на почтальоне

"message": "Call to undefined method Tymon\\JWTAuth\\Contracts\\Providers\\Auth::guard()",
"exception": "Symfony\\Component\\Debug\\Exception\\FatalThrowableError",

Как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

Используйте метод конструирования, например

public function __construct(){
    auth()->setDefaultDriver('api'); 
}

, и свою функцию входа в систему, например

public function login(){
$credentials = request(['email', 'password']);

if(!$token = auth()->attempt($credentials)){
  return response()->json(['error' => 'Incorrect email/password'], 401);
}
return $this->respondWithToken($token);
}

, и закомментируйте свою защитную функцию

0 голосов
/ 15 марта 2020

Вы можете использовать функцию \JWTAuth::attempt для получения токена, если пользователь вводит действительный адрес электронной почты и пароль, например:

....

use Tymon\JWTAuth\Exceptions\JWTException;

....

try {
            $token = \JWTAuth::attempt($request->only('email', 'password'));
            return $this->respondWithToken($token);
        } catch (JWTException $exception) {

                return response()->json([
                    'status' => false,
                    'data' => null,
                    'message' => 'Could not create token'
                ]);

        }

РЕДАКТИРОВАТЬ 1

Выше Отправленный вами ответ правильный.

попробуйте заменить Auth::guard() на Auth::guard('api')

public function guard()
  {
   return Auth::guard('api');
  }

Для получения дополнительной информации В GitHub есть аналогичная проблема для справки

...