创建一个symfony2手动记住我的cookie(FOSUserBundle)

创建一个symfony2手动记住我的cookie(FOSUserBundle),第1张

概述有人可以解释一下如何在控制器中手动创建记住我的cookie吗? 我希望用户在按下“注册”后保持登录状态 按钮,之后无需使用凭据登录. 我试图手动创建一个cookie,但我猜的是cookie 值不正确,因此“记住我”的功能 不起作用. 设置了具有正确名称的cookie.我检查过了. 使用法线时,记住我的功能按预期工作 使用用户凭据登录过程. security.yml security.yml记得我 有人可以解释一下如何在控制器中手动创建记住我的cookie吗?

我希望用户在按下“注册”后保持登录状态
按钮,之后无需使用凭据登录.

我试图手动创建一个cookie,但我猜的是cookie
值不正确,因此“记住我”的功能
不起作用.
设置了具有正确名称的cookie.我检查过了.

使用法线时,记住我的功能按预期工作
使用用户凭据登录过程.

security.yml
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 \Symfony\Component\httpFoundation\cookie(       'REMEMBERME',base64_encode(implode(':',array($member->getUsername(),$member->getpassword()))),time() + 60*60*24   ));return $redirectResponse;

更新:

我也尝试过使用
PersistentTokenBasedRememberMeServices类具有反射但它不起作用.一个cookie被设置但它不起作用

$token = $this->container->get('security.context')->getToken();$provIDerKey = $this->container->getParameter('fos_user.firewall_name');$securityKey = 'myKey';$persistenService = newPersistentTokenBasedRememberMeServices(array($um),array('path' => '/','name' => 'REMEMBERME','domain' =>null,'secure' => false,'httponly' => true,'lifetime' => 86400));$persistenService->setTokenProvIDer(new InMemoryTokenProvIDer());$method = new \ReflectionMethod('Symfony\Component\Security\http\RememberMe\PersistentTokenBasedRememberMeServices','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以使代码更加健壮和可移植.

总结

以上是内存溢出为你收集整理的创建一个symfony2手动记住我的cookie(FOSUserBundle)全部内容,希望文章能够帮你解决创建一个symfony2手动记住我的cookie(FOSUserBundle)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1130492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存