Symfony2在用户注册后自动登录


Symfony2 auto-login after user registration

我看到了一些关于这方面的帖子,特别是通过带有symfony2的URL自动登录(我不能使用它,因为我不知道$request中需要什么)和自动注册后用户身份验证。我尝试了后者,但它没有登录。

来自security.yml 的代码

 firewalls:
    admin_login_firewall:
      pattern:    ^/admin/login$
      anonymous:  ~
    admin:
        pattern:    ^/admin
        form_login:
            login_path:  admin_login
            check_path:  admin_login_check
            default_target_path: admin_dashboard  
        logout:
            path:   admin_logout
            target: admin_login
        http_basic:
            realm: "Licensing Admin Portal"
    member_login_firewall:
      pattern:    ^/members/login$
      anonymous:  ~
    members:
        pattern:    ^/members
        form_login:
            login_path:  member_login
            check_path:  member_login_check
            default_target_path: member_dashboard  
        logout:
            path:   member_logout
            target: home
        http_basic:
            realm: "Licensing Member Portal"        

encoders:
    Pmb'LicensingBundle'Entity'User: plaintext
access_control:
    - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/members/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/members/, roles: ROLE_USER }

控制器函数saveUserAction()的代码段:

    ... // Code preceding this point creates user entity and sets all fields
    $em = $this->getDoctrine()->getManager();
    if (empty($data['user_id'])) $em->persist($user);
    $em->flush();
    if (!empty($organization)) $this->linkOrganizationUserAction($organization,$user, true);
    if (isset($data['registering']))
    {
        $token = new UsernamePasswordToken($user, null, 'members', $user->getRoles());
        $this->get('security.context')->setToken($token);
        $this->get('session')->set('_security_main',serialize($token));
    }
    return $this->createJsonResponse($user);

我正在尝试登录到成员防火墙。我对此了解不足,无法进行故障排除。其中大部分只是复制/粘贴/编辑。如有任何帮助/解释,我们将不胜感激。我还阅读了Symfony2注册后自动登录下的文章,但我不认为这有什么意义,因为我不需要让用户通过不同的防火墙登录,只需要用户在成员防火墙下登录即可。

我确实注意到的一件事是,在持久化到数据库时,用户实体正在填充其salt字段,尽管我没有设置salt,也看不到任何自动设置salt的内容。我还没有使用salt,因为我还没有加密我的密码(只是想先用纯文本密码),当我试图用一个创建的用户登录时(它确实被创建了,只是没有登录),除非我清除了用户上的salt,否则我无法登录。我不知道这是否与自动登录不起作用有关。

此处的问题与行$this->get('session')->set('_security_main',serialize($token));有关。"security_main"的"_main"也是您进行身份验证的防火墙。所以应该是"_security_members"。更改后,代码按原样运行。