Laravel:实施JWT身份验证时发生错误

时间:2020-03-15 05:01:16

标签: laravel api jwt postman

尝试通过Postman发布API以验证站点中的用户时遇到错误。

登录功能:

    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 :(得分:0)

如果用户插入有效的电子邮件和密码,例如:

,则可以使用\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');
  }

有关更多信息,there is a similar issue in GitHub for reference

答案 1 :(得分:0)

使用类似

的构造方法
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);
}

并注释掉您的警卫功能