创建一个symfony2手动记住我的cookie(FOSUserBundle)
有人可以解释一下如何在控制器中手动创建记住我的cookie吗?
我希望用户在按下“注册”后保持登录状态 我试图手动创建一个cookie,但我猜的是cookie 使用法线时,记住我的功能按预期工作 security.yml security: firewalls: main: remember_me: lifetime: 86400 domain: ~ path: / key: myKey 这就是我现在所拥有的,即使设置了cookie,它也不起作用. $um = $this->get('fos_user.user_manager'); $member = $um->createUser(); … Form stuff with bindRequest etc. $um->updatePassword($member); $um->updateUser($member); $providerKey = $this->container->getParameter('fos_user.firewall_name'); $securityKey = 'myKey'; $token = new RememberMeToken($member,$providerKey,$securityKey,$member->getRoles()); $this->container->get('security.context')->setToken($token); $redirectResponse = new RedirectResponse($url); $redirectResponse->headers->setCookie( new SymfonyComponentHttpFoundationCookie( 'REMEMBERME',base64_encode(implode(':',array($member->getUsername(),$member->getPassword()))),time() + 60*60*24 ) ); return $redirectResponse; 更新: 我也尝试过使用 $token = $this->container->get('security.context')->getToken(); $providerKey = $this->container->getParameter('fos_user.firewall_name'); $securityKey = 'myKey'; $persistenService = new PersistentTokenBasedRememberMeServices(array($um),array('path' => '/','name' => 'REMEMBERME','domain' => null,'secure' => false,'httponly' => true,'lifetime' => 86400)); $persistenService->setTokenProvider(new InMemoryTokenProvider()); $method = new ReflectionMethod('SymfonyComponentSecurityHttpRememberMePersistentTokenBasedRememberMeServices','onLoginSuccess'); $method->setAccessible(true); $method->invoke($persistenService,$request,$redirectResponse,$token); 我正在使用Symfony v2.0.5和FOSUserBundle 1.0 更新2: 我尝试了第三种方式.与上述相同但没有反思: $token = $this->container->get('security.context')->getToken(); $providerKey = $this->container->getParameter('fos_user.firewall_name'); $securityKey = 'myKey'; $persistenService = new PersistentTokenBasedRememberMeServices(array($um),'domain' => null,'lifetime' => 31536000,'always_remember_me' => true,'remember_me_parameter' => '_remember_me')); $persistenService->setTokenProvider(new InMemoryTokenProvider()); $persistenService->loginSuccess($request,$token); 解决方法
如果要直接设置记忆cookie,则必须使用以下格式:
base64_encode(<classname>:base64_encode(<username>):<expiry-timestamp>:<hash>) 哈希将在哪里: sha256(<classname> . <username> . <expiry-timestamp> . <password> . <key>) 密钥是您在remember_me部分中输入安全性(.xml / .yml)的密钥. 这取自Symfony / Component / Security / Http / RememberMe / TokenBasedRememberMeService.php文件中的processAutoLoginCookie()方法. 这都是由同一个类中的generateCookieValue()方法完成的. 但是,我不建议直接使用这种方式,但是尝试查看是否可以调用TokenBasedRememberMeService :: onLoginSuccess()方法,该方法为您设置此cookie以使代码更加健壮和可移植. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |