php - 通过 POST 使用 SecurityServiceProvider 进行用户身份验证

标签 php silex

我想做的是

  1. bar.com 和
  2. 上对用户进行身份验证
  3. 将他们的凭据发布到 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/

相关文章:

php - Behat是否可以根据当前环境使用不同的步骤数据?

php - Composer 自动加载未在 Silex 中加载类

php - 如何在 Silex 中向自定义用户提供商注册后自动登录新用户?

php - 如何使用 Symfony2 路由组件将路由与 Controller 绑定(bind)

php - silex 如何使路由结束 "/"可选

php - 将 sql 结果显示为 html 可选元素

php - MySQL 条件左连接

PHP preg_replace 替换中的任何文本

php - Plivo 租一个号码 Api 不适合我

php - Silex 中的可选路由参数