Dragon
主机之家测评主机之家测评  2019-10-23 20:21 主机之家测评 隐藏边栏 |   抢沙发  58 
文章评分 0 次,平均分 0.0

最近一直在学习 Laravel 的 API 开发,结果一开始就难住了,按照 learnku 上“使用 Laravel Passport 处理 API 认证”敲代码,post 创建用户正常,但是 post 登录就一直报错。

最开始报错:“401:Unauthorized”,经过查看是因为 login 方法中问题:

  if(!Auth::attempt($credentials))      return response()->json([          'message' => 'Unauthorized'      ], 401);  $user = $request->user();

上述代码中 Auth::attemt 一直返回 false,检查了一下觉得可能是因为一直走默认的 web guard 导致的,而我是做 API 的。

然而 config/auth.php 中已经按照教程填写了 api guard,代码如下:

  'defaults' => [      'guard' => 'web',      'passwords' => 'users',  ],  'guards' => [      'web' => [          'driver' => 'session',          'provider' => 'users',      ],      'api' => [          'driver' => 'passport',          'provider' => 'users',          //'hash' => false,      ],  ],

因为是新手,也不太懂流程,就想着是不是还是走的 defaults 呢?就将开始的代码改了一下,显示指定 auth 采用 api guard:

  if(!Auth::guard('api')->attempt($credentials))

结果就报了标题中的:Method attempt does not exist.错误。

找了半天终于在 https://github.com/laravel/framework/issues/21194 中找到了问题真相,Passport 并未实现 attempt,所以当然报错了啊。

解决办法就是不通过 auth 验证登录,而是自行验证,具体代码如下:

  /*  if(!Auth::attempt($credentials))      return response()->json([          'message' => 'Unauthorized'      ], 401);  $user = $request->user();  */           $user = User::where('email', $request->email)->firstOrFail();  if(!Hash::check($request->password, $user->password)) {      return response()->json([          'message' => '用户名或密码错误!'      ], 401);  }

到此问题解决,再次 post 登录,成功获取 access_token。

Laravel Passport 提示:Method attempt does not exist.的解决方法

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

发表评论

扫一扫二维码分享