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
中声明
我被要求在 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