问题描述
我在 Laravel 7.0 中构建了一个应用程序,当用户登录时,我将一些应用程序范围的变量放入会话变量中,方法是将其添加到 LoginController 中:
protected function authenticated ($user)
{
Session::put('notifications',auth()->user()->unreadNotifications);
}
如果已通过在发生这种情况时注销并重新登录来验证问题(因为会话变量已按预期创建)。
不幸的是,当用户返回站点并“记住”他们之前的会话时,似乎会绕过 LoginController 并且未加载会话变量。有谁知道这种类型的登录是否会触发我可以在其中重新生成会话变量的事件?或者更优雅的处理方式?
谢谢!
解决方法
有一个 Login
事件 Illuminate\Auth\Events\Login
被触发,您可以检查保护方法 viaRemember
以查看它们是否通过记住我的 cookie 进行了身份验证。
您可以监听此 Login
事件,而不是使用该 authenticated
方法,您将涵盖这两种情况。
$messages= [
'username.min' => 'A User Name must be greater then 4 alphabets','password.min' => 'A Password must be greater then 8 alphabets','username.required' => 'A User Name is required','password.required' => 'A Password is required',];
$this->validate($request,[
'email' => 'required','password' => 'required|min:8|max:255',],$messages);
if(!auth()->attempt($request->only('email','password'),$request->remember))
{
return back()->with('status','Invalid Credentials');
}
return redirect()->route('dashboard');