您有什么想法吗,如何在哨兵 2 中进行身份验证时添加更多约束,我有一个公司表,用户属于一家公司,如果公司被禁用(将活动设置为 0 以在公司中将其标记为禁用表)那么用户应该无法登录。
简而言之,在登录某些用户时,它应该检查他们所属的公司并检查它是否处于活动状态,如果没有,则不要登录或抛出异常。
...如果您对此有任何想法,请提供帮助。谢谢 :)
您有什么想法吗,如何在哨兵 2 中进行身份验证时添加更多约束,我有一个公司表,用户属于一家公司,如果公司被禁用(将活动设置为 0 以在公司中将其标记为禁用表)那么用户应该无法登录。
简而言之,在登录某些用户时,它应该检查他们所属的公司并检查它是否处于活动状态,如果没有,则不要登录或抛出异常。
...如果您对此有任何想法,请提供帮助。谢谢 :)
您可以在不更改哨兵 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();
}
您可以在表格上保存公司/活动或非活动状态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));