1

セントリー2での認証中にさらに制約を追加する方法はありますか?会社のテーブルがあり、ユーザーは会社に属しており、会社が無効になっている場合(アクティブを0に設定して、会社で無効としてマークします)表)、ユーザーはログインできないはずです。

要するに、一部のユーザーをログに記録しているときに、所属する会社をチェックし、アクティブかどうかを確認する必要があります。アクティブでない場合は、ログインしないか、例外をスローします。

…何か心当たりがあればお願いします。ありがとう :)

4

2 に答える 2

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();
}
于 2013-10-21T14:00:48.790 に答える
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));
于 2013-11-26T07:50:46.353 に答える