最近一直在学习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。
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Laravel Passport提示:Method attempt does not exist.的解决方法》
文章链接:https://www.liuzhanwu.com/3450.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
文章名称:《Laravel Passport提示:Method attempt does not exist.的解决方法》
文章链接:https://www.liuzhanwu.com/3450.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
相关推荐
456CDN:为网络安全与加速保驾护航,CDN测评推荐
456CDN:高防CDN,200GB DDoS防护,无视CC,1TB流量@50Mbps带宽,500元/月,安全加速,智能守护,稳定安全
#618大促#最后一天|凌霞软件旗下新一代服务器面板 1Panel:永久授权 539元起,10台4900元,即买即赠SSL证书
#618大促#最后一天|凌霞软件旗下强大易用的建站工具 Halo:永久授权 660元起,10台6000元,即买即赠SSL证书
#6.18促销#Themebetter:WordPress主题特惠7折,DUX主题折后559元,不限制域名授权数目
耗子Linux 面板:又一个轻量 Linux 服务器运维管理面板
#11.11#Themebetter:年度大放价,全场6折特惠,DUX主题折后480元,不限制域名授权数目
紧急提醒:DediPath官宣跑路