我想知道如何按照主题行中的请求进行操作,因为下面的代码运行良好,但用户在检查$user->Activated状态之前已经登录。这里有一些代码可以说明:
AuthController
public function authenticated(Request $request, User $user)
{
if ($user->Activated) {
return redirect()->intended($this->redirectPath());
} else {
Auth::logout();
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'activated' => 'You need to activate your account to login'
]);
}
}
最好我想做以下事情:
AuthController
public function getCredentials(Request $request)
{
$credentials = $request->only($this->loginUsername(), 'password');
return array_add($credentials, 'Activated', '1');
}
但是,返回的唯一消息是"这些凭据与我们的记录不匹配",而不是"您需要激活您的帐户才能登录"。此外,一旦用户登录,我将如何更新LoginStatId,目前我是这样做的:
AuthController
public function authenticated(Request $request, User $user)
{
if ($user->Activated) {
$user->LoginStatusId = 1;
$user->save();
return redirect()->intended($this->redirectPath());
} else {
Auth::logout();
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'activated' => 'You need to activate your account to login'
]);
}
}
有没有更好的地方可以在他们登录后设置$user->LoginStatId,或者这是放置它的最佳位置?
打开此文件vendor'laravel'framework'src'Illuminate'Foundation'Auth'AuthenticatesUsers.php
在postLogin
中添加此代码块
// If activated is equal to 1, user allowed to login or throw an credential mismatch error
$userData = User::select('activated')->where('email', $request['email'])->first();
if ($userData->activated == 1) {
$request['activated'] = $activated;
}
$credentials = $this->getCredentials($request); //add these code before this line
并将'activated'
添加到getCredentials方法中。它看起来是这样的:
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password', 'activated');
}
只需使用此Auth::user()
,您就可以在任何地方检查用户登录状态。无需自行存储登录状态。例如,在任何控制器中,您都可以这样写:
if(Auth::user()){
// do this;
}else{
// do that;
}