我正在尝试制作一个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;
}
}
效果很好,但我遇到了记住我选项的问题。如何使用上面的自定义登录控制器?
答案 0 :(得分:1)
问题是你绕过安全listerner来自己创建一个经过身份验证的令牌。
要创建记住我的Cookie,您必须触发RememberMeServices的loginSuccess
方法。
$app['security.remember_me.service.my-firewall']->loginSuccess($request, $response, $token);
否则,您应该实现自己的PreAuthenticator: http://symfony.com/doc/current/cookbook/security/api_key_authentication.html