Laravel用户身份验证"已启用"列以及电子邮件和密码

时间:2015-01-24 14:04:16

标签: php authentication laravel laravel-4

我有:

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!';
    }

1 个答案:

答案 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添加到凭据,但是您将无法区分已禁用的用户和不正确的凭据。