Silex + RememberMeServiceProvider - 从代码登录

时间:2015-02-21 10:41:17

标签: silex

我正在尝试制作一个ajax登录表单。 我根据http://silex.sensiolabs.org/doc/providers/remember_me.html配置了RememberMeServiceProvider 它在默认登录表单中运行良好 - 转到'login_path'并由Silex管理。

我现在正在尝试制作自定义登录控制器(仅限AJAX)。 它看起来像这样:

public function ajaxLogin(Request $request, Application $app) {
    if (!AJAX)
        die;
    $email = $request->request->get('_username');
    $pass = $request->request->get('_password');
    if (!$email || !$pass)
        return 0;
    try {
        $user = APP::repo('users')->findOneByEmail($email);
        if (!$user)
            return 0;
        $encodedPass = $app['security.encoder_factory']->getEncoder($user)->encodePassword($pass, $user->getSalt());
        if ($encodedPass !== $user->getPassword())
            return 0;
        $token = new UsernamePasswordToken($user, $pass, 'all', $user->getRoles());
        $app['security']->setToken($token);
        return 1;
    } catch (Exception $e) {
        return 0;
    }
}

效果很好,但我遇到了记住我选项的问题。如何使用上面的自定义登录控制器?

1 个答案:

答案 0 :(得分:1)

问题是你绕过安全listerner来自己创建一个经过身份验证的令牌。

要创建记住我的Cookie,您必须触发RememberMeServicesloginSuccess方法。

$app['security.remember_me.service.my-firewall']->loginSuccess($request, $response, $token);

否则,您应该实现自己的PreAuthenticator: http://symfony.com/doc/current/cookbook/security/api_key_authentication.html

相关问题