最近一直在学习 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。

声明:1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
你可能也喜欢
- ♥ MySQL 判断字段是否为 Null08/22
- ♥ 云锁安全工具提示:服务器不在线的解决办法07/06
- ♥ Dell latitude 3450 怎么关闭触摸板(win7)08/25
- ♥ 曲娶工工是什么成语?08/23
- ♥ 微信拍一拍怎么使用?07/07
- ♥ thinkphp IP 获取和定位08/21







