Php 自动注册后记得我吗

Php 自动注册后记得我吗,php,symfony,symfony5,symfony-security,Php,Symfony,Symfony5,Symfony Security,我使用的是symfony5.2/PHP8 我的登录形式是简单的电子邮件+密码,我使用 这项工作没有任何问题 问题是在注册期间,我使用此代码段自动登录用户 $token = new UsernamePasswordToken( user: $user, credentials: null, firewallName: 'endusers', rol

我使用的是symfony5.2/PHP8

我的登录形式是简单的电子邮件+密码,我使用

这项工作没有任何问题

问题是在注册期间,我使用此代码段自动登录用户

            $token = new UsernamePasswordToken(
                user: $user,
                credentials: null,
                firewallName: 'endusers',
                roles: $user->getRoles(),
            );
            $this->container->get('security.token_storage')->setToken($token);
            $this->container->get('session')->set('_security_endusers', serialize($token))
虽然这项工作,但不幸的是,它并没有触发“记住我”功能 (这在我的理解中是正常的,因为“记住我”通常由“onLoginSucess”事件触发,而“onLoginSucess”事件在此未触发)

因此,我想知道如何在上述案例中设置“记住我”

更新Symfony 5.3 现在有一个
remembermHandlerInterface
服务与自动布线一起工作,所以您只需插入它并像这样使用它

            $rememberMe->createRememberMeCookie($user);
无需更新您的服务。yaml

Symfony 5.2 您可以通过使用并调用
loginsucess
来创建
记住我
cookie。 不过,它没有自动连线服务,所以您必须创建别名才能将其插入控制器中

服务的容器别名是
安全性、身份验证、记忆、服务、simplehash.
。根据它可能不是
simplehash
的配置,您可以通过执行
bin/console debug:container rememberme.services
来验证它

验证注册的服务后,在
config/services.yaml
中创建别名:

services:
     # ...
     Symfony\Component\Security\Http\RememberMe\RememberMeServicesInterface:
         alias: security.authentication.rememberme.services.simplehash.endusers
现在,您可以将服务注入控制器,并在成功注册后调用该函数

public function register(Request $request, RememberMeServicesInterface $rememberme, /* Other deps */)
{
    $token = new UsernamePasswordToken($user, null, 'endusers', $user->getRoles());
        
    $this->container->get('security.token_storage')->setToken($token);
    $this->container->get('session')->set('_security_endusers', serialize($token));
    
    // RememberMe needs a Response object so cookies can be set in the output
    $response = $this->redirectToRoute($route);
    
    $rememberme->loginSuccess($request, $response, $token);
    
    return $response;
}
根据防火墙配置,
始终记住我
已启用,但如果未启用,则需要在服务请求中设置
记住我参数
默认情况下记住我
),以实际创建cookie

$request->attributes->add(['_remember_me' => true]);
$rememberme->loginSuccess(/*...*/);

在Symfony 5.2中,也不适用于我。我收到以下错误:您请求了一个不存在的服务“security.authentication.rememberme.services.simplehash.endusers”。@dompie change
endusers
使用您的防火墙名称,很可能是
main
。您可以检查您的
security.yaml
配置或执行上述
console
命令以确保安全。
$request->attributes->add(['_remember_me' => true]);
$rememberme->loginSuccess(/*...*/);