Laravel多认证实现后调用Auth守卫方法报错:Method student不存在
解决Laravel多认证中「Method student does not exist」的问题
嘿,我明白你遇到的麻烦了——这个报错的原因很直接:当你用Auth::guard('student')->check()验证通过后,Auth::guard('student')已经返回了已认证的Student模型实例,根本不需要再调用student()方法,这就是为什么会报“方法不存在”的错误。
修正后的代码
你只需要把调用student()的部分去掉,直接访问模型的name属性就行:
@if(Auth::guard('student')->check()) <li><span style="color: white">Xin chào </span><a href="#" >{{ Auth::guard('student')->user()->name }}</a></li> @else <li><a href="{{ route('student.login') }}">Login</a></li> @endif
或者更简洁一点,因为默认Auth::guard('student')可以直接链式调用属性(底层会自动调用user()方法):
@if(Auth::guard('student')->check()) <li><span style="color: white">Xin chào </span><a href="#" >{{ Auth::guard('student')->name }}</a></li> @else <li><a href="{{ route('student.login') }}">Login</a></li> @endif
额外补充:如果想自定义guard的用户获取方法(可选)
如果你确实想通过student()方法来获取用户,可以在AuthServiceProvider的boot()方法里给student guard添加一个宏:
use Illuminate\Support\Facades\Auth; public function boot() { $this->registerPolicies(); Auth::guard('student')->macro('student', function () { return Auth::guard('student')->user(); }); }
这样你原来的代码就能正常运行了,但其实这属于多此一举,直接用user()或者直接访问属性更简洁。
内容的提问来源于stack exchange,提问作者Thanh Toàn
相关产品推荐
相关产品推荐

