我想做的是
- 在 bar.com 和 上对用户进行身份验证
- 将他们的凭据发布到 foo.com/login 并重新验证他们,而无需再次登录。
目前,为了获取 foo.com 上的安全页面,我正在通过 SecurityServiceProvider
和数据库支持的 UserProvider
使用基于表单的访问进行验证。效果很好:任何加载安全路由的尝试都会被防火墙拦截,然后在成功验证后重定向。
我想不通的是如何将 POST 变量(用户名和密码)传递到 provider
实例并将用户转发到提供的路由。
stub POST 路由:
$app->post('/login', function(Request $req) use ($app) {
$route = $req->request->filter('route');
$username = $req->get('username');
$password = $req->get('password');
/* magic happens...? */
});
最佳答案
这是一个使用用户提供程序加载用户的示例,检查密码是否匹配,然后在安全服务中设置 token 。因此,如果您将此代码放入路由中,您可以访问您的用户名和密码的请求。
$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
}
关于php - 通过 POST 使用 SecurityServiceProvider 进行用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217868/