用户在 Symfony 中注册后登录并设置 remember_me cookie

Posted

技术标签:

【中文标题】用户在 Symfony 中注册后登录并设置 remember_me cookie【英文标题】:Login and set remember_me cookie after user registration in Symfony 【发布时间】:2019-01-21 03:38:05 【问题描述】:

我有一个控制器操作,它处理用户的数据、注册用户、登录并将他们重定向到另一个控制器的操作。但是我无法获得“remember_me”cookie 集。

成功注册后,控制器将获取 $user 对象,然后将其传递给 GuardAuthenticatorHandlerauthenticateUserAndHandleSuccess() 方法这是 Symfony 的安全包的一部分。

use Symfony\Component\HttpFoundation\Request;
use App\Security\LoginFormAuthenticator;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;


public function register(Request $request, LoginFormAuthenticator $authenticator, GuardAuthenticatorHandler $guardHandler) 

    // do something... and get $user object

    return $guardHandler->authenticateUserAndHandleSuccess(
        $user,
        $request,
        $authenticator,
        'main'
    );


这样做是为了自动登录用户。但是,它没有设置当前在登录表单中工作和使用的 remember_me cookie。

来自security.yaml

    remember_me:
        secret: '%kernel.secret%'
        lifetime: 2592000 # 1 month in seconds
        path: /
        remember_me_parameter: login_form[_remember_me]

如何更改控制器以设置“remember_me”cookie?

【问题讨论】:

【参考方案1】:

我不知道在注册期间设置remember_me 是否是个好主意,但如果你真的需要它,只需检查TokenBasedRememberMeServices 的onLoginSuccess 方法,该方法在login 过程中正确执行remember me正在发送参数 - 这只是设置正确的 cookie。

【讨论】:

以上是关于用户在 Symfony 中注册后登录并设置 remember_me cookie的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2:如何手动登录用户? [复制]

Symfony 手动登录用户

使用 FOSUserBundle 自动登录 Symfony2 [重复]

Symfony3 onSecurityInteractiveLogin注销并设置flash

在 Laravel 中使用多个守卫时,在注册/登录后设置默认守卫

Symfony2:如何实现自定义用户登录和注册——摆脱 FOSUSerBundle