FOS 用户包确认 link 强制您登录

FOS User bundle confirm link forces you to login

我被要求在 CRM 中添加一封确认电子邮件,用户将注册然后收到一封包含 link 的电子邮件以确认以启用他们的帐户。但是,每当单击 link 时,它会立即重定向到登录页面,这是无用的,因为他们尚未确认。我试图在 security.yml 文件中排除它,但到目前为止没有成功。

我试过:

- { path: ^/register/*, role: IS_AUTHENTICATED_ANONYMOUSLY }

- { path: ^/confirm/, role: IS_AUTHENTICATED_ANONYMOUSLY }

- { path: ^/register/confirm/*, role: IS_AUTHENTICATED_ANONYMOUSLY }

但其中 none 似乎有效。

根据要求,FOS注册的路由文件:

<?xml version="1.0" encoding="UTF-8" ?>

<routes xmlns="http://symfony.com/schema/routing"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">

    <route id="fos_user_registration_register" path="/" methods="GET POST">
        <default key="_controller">FOSUserBundle:Registration:register</default>
    </route>

    <route id="fos_user_registration_check_email" path="/check-email" methods="GET">
        <default key="_controller">FOSUserBundle:Registration:checkEmail</default>
    </route>

    <route id="fos_user_registration_confirm" path="/confirm/{token}" methods="GET">
        <default key="_controller">FOSUserBundle:Registration:confirm</default>
    </route>

    <route id="fos_user_registration_confirmed" path="/confirmed" methods="GET">
        <default key="_controller">FOSUserBundle:Registration:confirmed</default>
    </route>

</routes>

FOS 用户配置:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: AppBundle\Entity\User
    registration:
        confirmation:
            enabled: true
            template:   emails/registration.html.twig
            from_email:
                address:        noreply@siteemail.co.uk
                sender_name:    #sender name here#
    resetting:
        email:
            from_email:
                address:        noreply@siteemail.co.uk
                sender_name:    #sender name here#
            template: emails/password_reset.html.twig

Symfony 3.1 / FOS 用户包 2.0 感谢任何帮助。

恕我直言,因为确认路由是 path="/confirm/{token}",那么您必须允许 ^/(confirm/){1}.+ 路径在 security.yml 中匿名认证,因为在确认期间用户尚未通过身份验证。

因此将 security.yml 编辑为:- { path: '^/(confirm/){1}.+', role: IS_AUTHENTICATED_ANONYMOUSLY }

同时检查注册电子邮件中的 url - 它应该指向 example.com/confirmation/???

检查你的security.yml 此配置必须有效!

## app/config/security.yml

## ...

firewalls:
    # This firewall is used to handle the public login area
    # This part is handled by the FOS User Bundle
    main:
        pattern: ^/
        form_login:
            # redirect to "/login" path if you aren't an admin
            login_path: fos_user_security_login
            check_path: fos_user_security_check
            provider: fos_userbundle
            #csrf_provider: form.csrf_provider
            #always_use_default_target_path: true
            #default_target_path: homepage
            csrf_token_generator: security.csrf.token_manager

        remember_me:
            secret:   '%secret%'
            lifetime: 604800
            domain: ".%domain_name%"
            always_remember_me: true
        anonymous: true
        logout:
          path: fos_user_security_logout

也可以在同一个 security.yml 中添加以下行:

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }

此配置应该有效。 还有另一种确定主机的方法:

    access_control:
        - { path: ^/logout$,        host: ^%domain_name%$,          roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/login$,         host: ^%domain_name%$,          roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register,       host: ^%domain_name%$,          roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting,      host: ^%domain_name%$,          roles: ROLE_USER }

%domain_name% - 是您的域名,即 example.com,您应该在 app/config/parameters.yml

中声明