我有:
if ($validator->fails()) {
return Redirect::to('/start')->withErrors($validator);
} else {
if (Auth::attempt(array('email' => $input['email'], 'password' => $input['password'])))
{
echo 'success';
}
}
我的users表中还有另一列名为enabled。对于尝试登录的用户,此值必须等于1,否则应将其发送回登录屏幕,并显示一条消息,告知他们该帐户已被禁用。
我怎样才能做到这一点?
$details = array('email' => $input['email'], 'password' => $input['password']);
if (Auth::user()->enabled) {
if(Auth::attempt($details)) {
echo 'success';
}
} else {
echo 'disabled!';
}
答案 0 :(得分:1)
我确定有人会给你一个"用这种方式扩展它"回答,但到目前为止最简单的方法是在代码中添加另一个条件。此外,您不需要将登录尝试包装在else中,因为如果触发了第一个if条件则返回。请参阅以下示例。
if ($validator->fails()) {
return Redirect::to('/start')->withErrors($validator);
}
$details = array('email' => $input['email'], 'password' => $input['password']);
if (Auth::attempt($details) && Auth::user()->enabled) {
echo 'success';
}
编辑:正如Lukas Geiter指出的那样,请注意用户仍然会登录 - 如果适用,您还必须手动注销它们。这解决了这个问题:
if ($validator->fails()) {
return Redirect::to('/start')->withErrors($validator);
}
$details = array('email' => $input['email'], 'password' => $input['password']);
if (Auth::attempt($details)) {
if (!Auth::user()->enabled) {
Auth::logout();
return Redirect::to('/your-login-screen-with-some-message');
}
echo 'success';
}
我还应该提一下,您实际上只需要将'enabled' => 1
添加到凭据,但是您将无法区分已禁用的用户和不正确的凭据。