在sentry 2身份验证过程中添加更多约束

时间:2013-10-21 12:53:14

标签: laravel laravel-4 cartalyst-sentry

您是否有任何想法,如何在哨兵2中进行身份验证时添加更多约束,我有公司表,用户属于公司,以及公司是否已禁用(将活动设置为0以将其标记为已禁用在公司表中)然后用户应该无法登录。

简而言之,在记录某些用户时,应该检查他们所属的公司并检查它是否处于活动状态,如果没有,则不要登录或抛出异常。

...如果你有任何想法,请帮忙。谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以在不更改哨兵2代码的情况下保持简单。

try
{
    $user = Sentry::authenticate($credentials, false);
    if ($user->company->active == 0)
    {
        Sentry::logout();
        // Redirect to login page with the proper flash message
    }
}
catch (Cartalyst\Sentry\Users\LoginRequiredException $e)
{
}
... other catches

<强>更新 如果需要,您可以为Sentry2创建自己的服务提供商。注册类时,可以注册扩展\ Cartalyst \ Sentry \ Sentry类的类,并覆盖login()方法。

您的代码如下所示:

public function login(UserInterface $user, $remember = false)
{
    if ( ! $user->isActivated())
    {
        $login = $user->getLogin();
        throw new UserNotActivatedException("Cannot login user [$login] as they are not activated.");
    }

    // you can create this method in your company model
    if ($user->company->isDisabled()) 
    {
        throw new CompanyDisabledException("... message ...");
    }


    $this->user = $user;

    // Create an array of data to persist to the session and / or cookie
    $toPersist = array($user->getId(), $user->getPersistCode());

    // Set sessions
    $this->session->put($toPersist);

    if ($remember)
    {
        $this->cookie->forever($toPersist);
    }

    // The user model can attach any handlers
    // to the "recordLogin" event.
    $user->recordLogin();
}

答案 1 :(得分:0)

您可以将公司/活动或非活动状态保存在Users表中以及稍后登录控制器上,您可以将要检查该过程的其他字段传递给$credentials阵列。

这样的事情必须要做的工作:

// Set login credentials
$credentials = array(
    'email'    => Input::get('email'),
    'password' => Input::get('password'),
    'company'  => 1,
);

// Authenticate user
Sentry::authenticate($credentials, Input::get('remember-me', 0));