通过开机自检与安全服务提供商进行用户身份验证


User authentication with SecurityServiceProvider via POST

我要做的是

  1. 上对用户进行身份验证.com和
  2. 发布他们的凭据以 foo.com/login 并重新进行身份验证,而无需再次登录。

目前,为了在 foo.com 上获取安全页面,我正在通过SecurityServiceProvider和数据库支持的UserProvider使用基于表单的访问来进行身份验证。效果很好:任何加载安全路由的尝试都会被防火墙拦截,然后在身份验证成功后重定向。

我无法弄清楚的是如何将 POST 变量(用户名和密码)传递给provider实例并将用户转发到提供的路由。

存根开机自检路由:

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

下面是使用用户提供程序加载用户检查密码匹配项然后在安全服务中设置令牌的示例。因此,如果您将此代码放入路由中,则可以访问用户名和密码请求。

$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
}