3

私がやろうとしていることは

  1. bar .com でユーザーを認証し、
  2. 資格情報を foo.com/login に投稿し、再ログインせずに再認証します。

現在、foo.com で安全なページを取得するために、フォームベースのアクセスSecurityServiceProviderと db-backedUserProviderを使用して認証しています。優れた機能: 保護されたルートをロードしようとすると、ファイアウォールによって傍受され、認証が成功した後にリダイレクトされます。

私が理解できないのは、POST 変数 (ユーザー名とパスワード) をproviderインスタンスに渡し、ユーザーを提供されたルートに転送する方法です。

スタブ POST ルート:

$app->post('/login', function(Request $req) use ($app) {
    $route    = $req->request->filter('route');
    $username = $req->get('username');
    $password = $req->get('password');

    /* magic happens...? */ 
});
4

1 に答える 1

1

これは、ユーザープロバイダーを使用してユーザーをロードし、パスワードが一致することを確認してから、セキュリティサービスにトークンを設定する例です。したがって、このコードをルートに配置すると、ユーザー名とパスワードのリクエストにアクセスできます。

$userProvider = $app['security.user_provider.default'];

$user = null;
try {
   $user = $userProvider->loadUserByUsername($username);
} catch (UsernameNotFoundException $e)
{
   ;
}
$encoder = $app['security.encoder_factory']->getEncoder($user);

// compute the encoded password
$encodedPassword = $encoder->encodePassword($password, $user->getSalt());

// compare passwords
if ($user->password == $encodedPassword)
{
   // set security token into security
   $token = new UsernamePasswordToken($user, $password, 'yourProviderKeyHere', array('ROLE_USER'));
   $app['security']->setToken($token);

   // redirect or give response here
} else {
   // error feedback
}
于 2012-08-11T18:17:30.410 に答える