这是非常标准的登录功能和验证,效果很好。但我还想检查用户是否处于活动状态。我在用户表中设置了一列,并将“活动”设置为 0 或 1。
public function post_login()
{
$input = Input::all();
$rules = array(
'email' => 'required|email',
'password' => 'required',
);
$validation = Validator::make($input, $rules);
if ($validation->fails())
{
return Redirect::to_route('login_user')
->with_errors($validation->errors)->with_input();
}
$credentials = array(
'username' => $input['email'],
'password' => $input['password'],
);
if (Auth::attempt($credentials))
{
// Set remember me cookie if the user checks the box
$remember = Input::get('remember');
if ( !empty($remember) )
{
Auth::login(Auth::user()->id, true);
}
return Redirect::home();
} else {
return Redirect::to_route('login_user')
->with('login_errors', true);
}
}
我已经尝试过这样的事情:
$is_active = Auth::user()->active;
if (!$is_active == 1)
{
echo "Account not activated";
}
但这只能在“验证尝试”if 语句中使用,并且此时用户凭据(电子邮件和通行证)已经经过验证。因此,即使用户帐户此时未激活,他们也已经登录。
我需要一种返回验证的方法,让他们知道他们仍然需要激活他们的帐户,并在检查他们的电子邮件和通行证的同时检查他们的帐户是否已设置。
过滤器是必经之路。解决这个问题既简单又干净,请参阅下面的示例。
Route::filter('auth', function()
{
if (Auth::guest())
{
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Redirect::guest('login');
}
}
else
{
// If the user is not active any more, immidiately log out.
if(Auth::check() && !Auth::user()->active)
{
Auth::logout();
return Redirect::to('/');
}
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)