如何使用无密码登录链接认证吗
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
启用身份验证系统在你的配置以使用此功能。
主要安全指南如果还没有这种情况。
login_link选择防火墙。您必须配置一个check_route
和signature_properties
当启用此身份验证:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_checksignature_properties:(“id”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,]]]]);
的signature_properties
用于创建一个签署了URL。这必须包含至少一个属性用户
对象,唯一地标识该用户(如用户ID)。阅读更多关于此设置进一步的下面。
的check_route
必须在现有的路线,它将用于生成验证用户登录链接。你不需要一个控制器(也可以是空的),因为登录链接将拦截请求身份验证这条路线:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类SecurityController扩展AbstractController{/ * * *@Route(name = " / login_check”“login_check”) * /公共函数检查(){扔新\ LogicException (这段代码不应达到的);}}
1 2 3 4 5
#配置/ routes.yaml#……login_check:路径:/ login_check
1 2 3 4 5 6 7 8 9 10
< !——配置/路线。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><路线xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing //www.oldmanjams.com/schema/routing/routing-1.0.xsd”>< !——……- - ><路线id=“login_check”路径=“/ login_check”/ >< /路线>
1 2 3 4 5 6 7 8
/ /配置/ routes.php使用应用程序\控制器\DefaultController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){/ /……美元路线- >add (“login_check”,' / login_check ');};
LoginLinkHandlerInterface。正确的登录链接处理程序autowired的给你当这个接口类型提示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用应用程序\存储库\UserRepository;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\路由\注释\路线;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkHandlerInterface;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){/ /检查是否登录表单提交如果(美元请求- >isMethod (“职位”)){/ /加载用户以某种方式(例如使用表单输入)美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);/ /创建一个登录链接为用户返回一个实例/ / LoginLinkDetails美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);美元loginLink=美元loginLinkDetails- >getUrl ();/ /……发送链接并返回一个响应(参见下一节)}/ /如果不提交,呈现“登录”的形式返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
1 2 3 4 5 6 7 8 9
{/安全/ login.html #模板。树枝#}{%扩展“base.html。嫩枝' %}{%块身体%}<形式行动=”{{路径(“登录”)}}”方法=“职位”><输入类型=“电子邮件”的名字=“电子邮件”><按钮类型=“提交”>发送登录链接< /按钮>< /形式>{%endblock%}
在这个控制器,用户提交他们的电子邮件地址控制器。这个属性的基础上,正确的用户加载和创建一个登录链接使用createLoginLink ()。
谨慎
向用户发送这个链接是很重要的没有直接表现出来,因为这将允许任何人登录。例如,使用梅勒组件邮件登录链接给用户。或使用组件发送一个短信到用户的设备。
通知组件。使用特殊的LoginLinkNotification创建一个通知并将其发送到用户的电子邮件地址或电话号码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40
/ / src /控制器/ SecurityController.php/ /……使用欧宝娱乐app下载地址\组件\通知人\NotifierInterface;使用欧宝娱乐app下载地址\组件\通知人\收件人\收件人;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkNotification;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(NotifierInterface美元通知人,LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){如果(美元请求- >isMethod (“职位”)){美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);/ /创建一个通知基于登录链接的细节美元通知=新LoginLinkNotification (美元loginLinkDetails,“欢迎来到我的网站!”/ /邮件主题);/ /创建一个接收方为这个用户美元收件人=新收件人(美元用户- >getEmail ());/ /发送通知给用户美元通知人- >发送(美元通知,美元收件人);/ /渲染一个“登录链接发送!”页面返回美元这- >呈现(“安全/ login_link_sent.html.twig”);}返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
这将发送一个电子邮件这样的用户:
提示
您可以定制这个电子邮件模板通过扩展LoginLinkNotification
和配置另一个htmlTemplate
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /通知/ CustomLoginLinkNotification名称空间应用程序\通知人;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkNotification;类CustomLoginLinkNotification扩展LoginLinkNotification{公共函数asEmailMessage(EmailRecipientInterface美元收件人、字符串美元运输= null):哦?EmailMessage{美元emailMessage=父::asEmailMessage (美元收件人,美元运输);/ /得到NotificationEmail对象和覆盖模板美元电子邮件=美元emailMessage- >getMessage ();美元电子邮件- >htmlTemplate (“电子邮件/ custom_login_link_email.html.twig”);返回美元emailMessage;}}
然后,使用这个新的CustomLoginLinkNotification
在控制器中。
限制登录链接一生
无效的登录链接
允许链接只能使用一次
到期
UNIX时间戳链接时到期。
用户
的返回值$ user - > getUsername ()
这个用户。
哈希
一个散列的到期
,用户
和任何签名属性配置。每当这些变化、散列的变化和前一个登录链接是无效的。
您可以添加更多属性哈希
通过使用signature_properties
选择:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_checksignature_properties:[id,电子邮件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”><signature-property>id< /signature-property><signature-property>电子邮件< /signature-property>< /登录链接>< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,“signature_properties”= > [“id”,“电子邮件”]]]]]);
从用户属性获取对象使用PropertyAccess组件(如使用getEmail ()
或一个公共美元的电子邮件
属性在这个例子)。
提示
您还可以使用签名属性非常先进的无效逻辑添加到您的登录链接。例如,如果你存储lastLinkRequestedAt美元
在你更新你的用户属性requestLoginLink ()
控制器,可以使所有登录链接当用户请求一个新链接。
max_uses选择:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_check#只允许使用的链接3次max_uses:3#选择、配置缓存池# used_link_cache:“cache.redis”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”>< !——max-uses:只允许使用的链接3次used-link-cache:可选配置缓存池- - ><登录链接check-route=“login_check”max-uses=“3”used-link-cache=“cache.redis”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,/ /只允许使用的链接3次“max_uses”= >3,/ /可选配置缓存池/ /“used_link_cache”= >“cache.redis”,]]]]);
确保有足够的空间留在缓存,否则无效的链接可以不再是存储(因此再次成为有效)。过期无效的链接会自动从缓存中删除。
不清除缓存池缓存:清晰
命令,但删除var /缓存/
手动删除缓存可能如果缓存组件配置存储缓存的位置。读了缓存指导的更多信息。
AuthenticationSuccessHandlerInterface:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /安全/认证/ AuthenticationSuccessHandler.php名称空间应用程序\安全\身份验证;使用欧宝娱乐app下载地址\组件\HttpFoundation\JsonResponse;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\安全\核心\身份验证\令牌\TokenInterface;使用欧宝娱乐app下载地址\组件\安全\Http\身份验证\AuthenticationSuccessHandlerInterface;类AuthenticationSuccessHandler实现了AuthenticationSuccessHandlerInterface{公共函数onAuthenticationSuccess(请求美元请求,TokenInterface美元令牌):JsonResponse{美元用户=美元令牌- >getUser ();美元userApiToken=美元用户- >getApiToken ();返回新JsonResponse ([“apiToken”= >“userApiToken”]);}}
然后,配置这个服务ID作为success_handler
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_check生命周期:600年max_uses:1success_handler:App \安全\ \ AuthenticationSuccessHandler身份验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”check-post-only=“真正的”max-uses=“1”一生=“600”成功处理程序=“应用程序\安全\ \ AuthenticationSuccessHandler身份验证”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ security.php使用应用程序\安全\身份验证\AuthenticationSuccessHandler;美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,“一生”= >600年,“max_uses”= >1,“success_handler”= > AuthenticationSuccessHandler::类、]]]]);
提示
如果你想定制默认的失败处理,使用failure_handler
选项,创建一个类实现AuthenticationFailureHandlerInterface。
主要安全指南如果还没有这种情况。
login_link选择防火墙。您必须配置一个check_route
和signature_properties
当启用此身份验证:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_checksignature_properties:(“id”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,]]]]);
的signature_properties
用于创建一个签署了URL。这必须包含至少一个属性用户
对象,唯一地标识该用户(如用户ID)。阅读更多关于此设置进一步的下面。
的check_route
必须在现有的路线,它将用于生成验证用户登录链接。你不需要一个控制器(也可以是空的),因为登录链接将拦截请求身份验证这条路线:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类SecurityController扩展AbstractController{/ * * *@Route(name = " / login_check”“login_check”) * /公共函数检查(){扔新\ LogicException (这段代码不应达到的);}}
1 2 3 4 5
#配置/ routes.yaml#……login_check:路径:/ login_check
1 2 3 4 5 6 7 8 9 10
< !——配置/路线。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><路线xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing //www.oldmanjams.com/schema/routing/routing-1.0.xsd”>< !——……- - ><路线id=“login_check”路径=“/ login_check”/ >< /路线>
1 2 3 4 5 6 7 8
/ /配置/ routes.php使用应用程序\控制器\DefaultController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){/ /……美元路线- >add (“login_check”,' / login_check ');};
LoginLinkHandlerInterface。正确的登录链接处理程序autowired的给你当这个接口类型提示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用应用程序\存储库\UserRepository;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\路由\注释\路线;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkHandlerInterface;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){/ /检查是否登录表单提交如果(美元请求- >isMethod (“职位”)){/ /加载用户以某种方式(例如使用表单输入)美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);/ /创建一个登录链接为用户返回一个实例/ / LoginLinkDetails美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);美元loginLink=美元loginLinkDetails- >getUrl ();/ /……发送链接并返回一个响应(参见下一节)}/ /如果不提交,呈现“登录”的形式返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
1 2 3 4 5 6 7 8 9
{/安全/ login.html #模板。树枝#}{%扩展“base.html。嫩枝' %}{%块身体%}<形式行动=”{{路径(“登录”)}}”方法=“职位”><输入类型=“电子邮件”的名字=“电子邮件”><按钮类型=“提交”>发送登录链接< /按钮>< /形式>{%endblock%}
在这个控制器,用户提交他们的电子邮件地址控制器。这个属性的基础上,正确的用户加载和创建一个登录链接使用createLoginLink ()。
谨慎
向用户发送这个链接是很重要的没有直接表现出来,因为这将允许任何人登录。例如,使用梅勒组件邮件登录链接给用户。或使用组件发送一个短信到用户的设备。
通知组件。使用特殊的LoginLinkNotification创建一个通知并将其发送到用户的电子邮件地址或电话号码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40
/ / src /控制器/ SecurityController.php/ /……使用欧宝娱乐app下载地址\组件\通知人\NotifierInterface;使用欧宝娱乐app下载地址\组件\通知人\收件人\收件人;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkNotification;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(NotifierInterface美元通知人,LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){如果(美元请求- >isMethod (“职位”)){美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);/ /创建一个通知基于登录链接的细节美元通知=新LoginLinkNotification (美元loginLinkDetails,“欢迎来到我的网站!”/ /邮件主题);/ /创建一个接收方为这个用户美元收件人=新收件人(美元用户- >getEmail ());/ /发送通知给用户美元通知人- >发送(美元通知,美元收件人);/ /渲染一个“登录链接发送!”页面返回美元这- >呈现(“安全/ login_link_sent.html.twig”);}返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
这将发送一个电子邮件这样的用户:
提示
您可以定制这个电子邮件模板通过扩展LoginLinkNotification
和配置另一个htmlTemplate
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /通知/ CustomLoginLinkNotification名称空间应用程序\通知人;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkNotification;类CustomLoginLinkNotification扩展LoginLinkNotification{公共函数asEmailMessage(EmailRecipientInterface美元收件人、字符串美元运输= null):哦?EmailMessage{美元emailMessage=父::asEmailMessage (美元收件人,美元运输);/ /得到NotificationEmail对象和覆盖模板美元电子邮件=美元emailMessage- >getMessage ();美元电子邮件- >htmlTemplate (“电子邮件/ custom_login_link_email.html.twig”);返回美元emailMessage;}}
然后,使用这个新的CustomLoginLinkNotification
在控制器中。
login_link选择防火墙。您必须配置一个check_route
和signature_properties
当启用此身份验证:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_checksignature_properties:(“id”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,]]]]);
的signature_properties
用于创建一个签署了URL。这必须包含至少一个属性用户
对象,唯一地标识该用户(如用户ID)。阅读更多关于此设置进一步的下面。
的check_route
必须在现有的路线,它将用于生成验证用户登录链接。你不需要一个控制器(也可以是空的),因为登录链接将拦截请求身份验证这条路线:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类SecurityController扩展AbstractController{/ * * *@Route(name = " / login_check”“login_check”) * /公共函数检查(){扔新\ LogicException (这段代码不应达到的);}}
1 2 3 4 5
#配置/ routes.yaml#……login_check:路径:/ login_check
1 2 3 4 5 6 7 8 9 10
< !——配置/路线。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><路线xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing //www.oldmanjams.com/schema/routing/routing-1.0.xsd”>< !——……- - ><路线id=“login_check”路径=“/ login_check”/ >< /路线>
1 2 3 4 5 6 7 8
/ /配置/ routes.php使用应用程序\控制器\DefaultController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){/ /……美元路线- >add (“login_check”,' / login_check ');};
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_checksignature_properties:(“id”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,]]]]);
signature_properties
用于创建一个签署了URL。这必须包含至少一个属性用户
对象,唯一地标识该用户(如用户ID)。阅读更多关于此设置进一步的下面。check_route
必须在现有的路线,它将用于生成验证用户登录链接。你不需要一个控制器(也可以是空的),因为登录链接将拦截请求身份验证这条路线:- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类SecurityController扩展AbstractController{/ * * *@Route(name = " / login_check”“login_check”) * /公共函数检查(){扔新\ LogicException (这段代码不应达到的);}}
1 2 3 4 5
#配置/ routes.yaml#……login_check:路径:/ login_check
1 2 3 4 5 6 7 8 9 10
< !——配置/路线。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><路线xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing //www.oldmanjams.com/schema/routing/routing-1.0.xsd”>< !——……- - ><路线id=“login_check”路径=“/ login_check”/ >< /路线>
1 2 3 4 5 6 7 8
/ /配置/ routes.php使用应用程序\控制器\DefaultController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){/ /……美元路线- >add (“login_check”,' / login_check ');};
LoginLinkHandlerInterface。正确的登录链接处理程序autowired的给你当这个接口类型提示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用应用程序\存储库\UserRepository;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\路由\注释\路线;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkHandlerInterface;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){/ /检查是否登录表单提交如果(美元请求- >isMethod (“职位”)){/ /加载用户以某种方式(例如使用表单输入)美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);/ /创建一个登录链接为用户返回一个实例/ / LoginLinkDetails美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);美元loginLink=美元loginLinkDetails- >getUrl ();/ /……发送链接并返回一个响应(参见下一节)}/ /如果不提交,呈现“登录”的形式返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
1 2 3 4 5 6 7 8 9
{/安全/ login.html #模板。树枝#}{%扩展“base.html。嫩枝' %}{%块身体%}<形式行动=”{{路径(“登录”)}}”方法=“职位”><输入类型=“电子邮件”的名字=“电子邮件”><按钮类型=“提交”>发送登录链接< /按钮>< /形式>{%endblock%}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
/ / src /控制器/ SecurityController.php名称空间应用程序\控制器;使用应用程序\存储库\UserRepository;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\路由\注释\路线;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkHandlerInterface;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){/ /检查是否登录表单提交如果(美元请求- >isMethod (“职位”)){/ /加载用户以某种方式(例如使用表单输入)美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);/ /创建一个登录链接为用户返回一个实例/ / LoginLinkDetails美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);美元loginLink=美元loginLinkDetails- >getUrl ();/ /……发送链接并返回一个响应(参见下一节)}/ /如果不提交,呈现“登录”的形式返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
1 2 3 4 5 6 7 8 9
{/安全/ login.html #模板。树枝#}{%扩展“base.html。嫩枝' %}{%块身体%}<形式行动=”{{路径(“登录”)}}”方法=“职位”><输入类型=“电子邮件”的名字=“电子邮件”><按钮类型=“提交”>发送登录链接< /按钮>< /形式>{%endblock%}
在这个控制器,用户提交他们的电子邮件地址控制器。这个属性的基础上,正确的用户加载和创建一个登录链接使用createLoginLink ()。
谨慎
向用户发送这个链接是很重要的没有直接表现出来,因为这将允许任何人登录。例如,使用梅勒组件邮件登录链接给用户。或使用组件发送一个短信到用户的设备。
通知组件。使用特殊的LoginLinkNotification创建一个通知并将其发送到用户的电子邮件地址或电话号码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40
/ / src /控制器/ SecurityController.php/ /……使用欧宝娱乐app下载地址\组件\通知人\NotifierInterface;使用欧宝娱乐app下载地址\组件\通知人\收件人\收件人;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkNotification;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(NotifierInterface美元通知人,LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){如果(美元请求- >isMethod (“职位”)){美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);/ /创建一个通知基于登录链接的细节美元通知=新LoginLinkNotification (美元loginLinkDetails,“欢迎来到我的网站!”/ /邮件主题);/ /创建一个接收方为这个用户美元收件人=新收件人(美元用户- >getEmail ());/ /发送通知给用户美元通知人- >发送(美元通知,美元收件人);/ /渲染一个“登录链接发送!”页面返回美元这- >呈现(“安全/ login_link_sent.html.twig”);}返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40
/ / src /控制器/ SecurityController.php/ /……使用欧宝娱乐app下载地址\组件\通知人\NotifierInterface;使用欧宝娱乐app下载地址\组件\通知人\收件人\收件人;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkNotification;类SecurityController扩展AbstractController{/ * * *@Route(name = " /登录”“登录”)* /公共函数requestLoginLink(NotifierInterface美元通知人,LoginLinkHandlerInterface美元loginLinkHandler,UserRepository美元userRepository,请求美元请求){如果(美元请求- >isMethod (“职位”)){美元电子邮件=美元请求- >请求- >get (“电子邮件”);美元用户=美元userRepository- >findOneBy ([“电子邮件”= >美元电子邮件]);美元loginLinkDetails=美元loginLinkHandler- >createLoginLink (美元用户);/ /创建一个通知基于登录链接的细节美元通知=新LoginLinkNotification (美元loginLinkDetails,“欢迎来到我的网站!”/ /邮件主题);/ /创建一个接收方为这个用户美元收件人=新收件人(美元用户- >getEmail ());/ /发送通知给用户美元通知人- >发送(美元通知,美元收件人);/ /渲染一个“登录链接发送!”页面返回美元这- >呈现(“安全/ login_link_sent.html.twig”);}返回美元这- >呈现(“安全/ login.html.twig”);}/ /……}
这将发送一个电子邮件这样的用户:
提示
您可以定制这个电子邮件模板通过扩展LoginLinkNotification
和配置另一个htmlTemplate
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /通知/ CustomLoginLinkNotification名称空间应用程序\通知人;使用欧宝娱乐app下载地址\组件\安全\Http\LoginLink\LoginLinkNotification;类CustomLoginLinkNotification扩展LoginLinkNotification{公共函数asEmailMessage(EmailRecipientInterface美元收件人、字符串美元运输= null):哦?EmailMessage{美元emailMessage=父::asEmailMessage (美元收件人,美元运输);/ /得到NotificationEmail对象和覆盖模板美元电子邮件=美元emailMessage- >getMessage ();美元电子邮件- >htmlTemplate (“电子邮件/ custom_login_link_email.html.twig”);返回美元emailMessage;}}
然后,使用这个新的CustomLoginLinkNotification
在控制器中。
限制登录链接一生
到期
UNIX时间戳链接时到期。
用户
的返回值$ user - > getUsername ()
这个用户。
哈希
一个散列的到期
,用户
和任何签名属性配置。每当这些变化、散列的变化和前一个登录链接是无效的。
您可以添加更多属性哈希
通过使用signature_properties
选择:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_checksignature_properties:[id,电子邮件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”><signature-property>id< /signature-property><signature-property>电子邮件< /signature-property>< /登录链接>< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,“signature_properties”= > [“id”,“电子邮件”]]]]]);
从用户属性获取对象使用PropertyAccess组件(如使用getEmail ()
或一个公共美元的电子邮件
属性在这个例子)。
提示
您还可以使用签名属性非常先进的无效逻辑添加到您的登录链接。例如,如果你存储lastLinkRequestedAt美元
在你更新你的用户属性requestLoginLink ()
控制器,可以使所有登录链接当用户请求一个新链接。
用户
$ user - > getUsername ()
这个用户。哈希
到期
,用户
和任何签名属性配置。每当这些变化、散列的变化和前一个登录链接是无效的。哈希
通过使用signature_properties
选择:- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_checksignature_properties:[id,电子邮件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”><signature-property>id< /signature-property><signature-property>电子邮件< /signature-property>< /登录链接>< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,“signature_properties”= > [“id”,“电子邮件”]]]]]);
getEmail ()
或一个公共美元的电子邮件
属性在这个例子)。提示
您还可以使用签名属性非常先进的无效逻辑添加到您的登录链接。例如,如果你存储lastLinkRequestedAt美元
在你更新你的用户属性requestLoginLink ()
控制器,可以使所有登录链接当用户请求一个新链接。
max_uses选择:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_check#只允许使用的链接3次max_uses:3#选择、配置缓存池# used_link_cache:“cache.redis”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”>< !——max-uses:只允许使用的链接3次used-link-cache:可选配置缓存池- - ><登录链接check-route=“login_check”max-uses=“3”used-link-cache=“cache.redis”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,/ /只允许使用的链接3次“max_uses”= >3,/ /可选配置缓存池/ /“used_link_cache”= >“cache.redis”,]]]]);
确保有足够的空间留在缓存,否则无效的链接可以不再是存储(因此再次成为有效)。过期无效的链接会自动从缓存中删除。
不清除缓存池缓存:清晰
命令,但删除var /缓存/
手动删除缓存可能如果缓存组件配置存储缓存的位置。读了缓存指导的更多信息。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_check#只允许使用的链接3次max_uses:3#选择、配置缓存池# used_link_cache:“cache.redis”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”>< !——max-uses:只允许使用的链接3次used-link-cache:可选配置缓存池- - ><登录链接check-route=“login_check”max-uses=“3”used-link-cache=“cache.redis”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ security.php美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,/ /只允许使用的链接3次“max_uses”= >3,/ /可选配置缓存池/ /“used_link_cache”= >“cache.redis”,]]]]);
缓存:清晰
命令,但删除var /缓存/
手动删除缓存可能如果缓存组件配置存储缓存的位置。读了缓存指导的更多信息。AuthenticationSuccessHandlerInterface:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /安全/认证/ AuthenticationSuccessHandler.php名称空间应用程序\安全\身份验证;使用欧宝娱乐app下载地址\组件\HttpFoundation\JsonResponse;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\安全\核心\身份验证\令牌\TokenInterface;使用欧宝娱乐app下载地址\组件\安全\Http\身份验证\AuthenticationSuccessHandlerInterface;类AuthenticationSuccessHandler实现了AuthenticationSuccessHandlerInterface{公共函数onAuthenticationSuccess(请求美元请求,TokenInterface美元令牌):JsonResponse{美元用户=美元令牌- >getUser ();美元userApiToken=美元用户- >getApiToken ();返回新JsonResponse ([“apiToken”= >“userApiToken”]);}}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /安全/认证/ AuthenticationSuccessHandler.php名称空间应用程序\安全\身份验证;使用欧宝娱乐app下载地址\组件\HttpFoundation\JsonResponse;使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;使用欧宝娱乐app下载地址\组件\安全\核心\身份验证\令牌\TokenInterface;使用欧宝娱乐app下载地址\组件\安全\Http\身份验证\AuthenticationSuccessHandlerInterface;类AuthenticationSuccessHandler实现了AuthenticationSuccessHandlerInterface{公共函数onAuthenticationSuccess(请求美元请求,TokenInterface美元令牌):JsonResponse{美元用户=美元令牌- >getUser ();美元userApiToken=美元用户- >getApiToken ();返回新JsonResponse ([“apiToken”= >“userApiToken”]);}}
然后,配置这个服务ID作为success_handler
:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/包/ security.yaml安全:防火墙:主要:login_link:check_route:login_check生命周期:600年max_uses:1success_handler:App \安全\ \ AuthenticationSuccessHandler身份验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
< !——配置/包/安全。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><srv:容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/security”xmlns:深水救生艇=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/security //www.oldmanjams.com/schema/dic/security/security-1.0.xsd”><配置><防火墙的名字=“主要”><登录链接check-route=“login_check”check-post-only=“真正的”max-uses=“1”一生=“600”成功处理程序=“应用程序\安全\ \ AuthenticationSuccessHandler身份验证”/ >< /防火墙>< /配置>< /srv:容器>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/包/ security.php使用应用程序\安全\身份验证\AuthenticationSuccessHandler;美元容器- >loadFromExtension (“安全”,(“防火墙”= > [“主要”= > [“login_link”= > [“check_route”= >“login_check”,“一生”= >600年,“max_uses”= >1,“success_handler”= > AuthenticationSuccessHandler::类、]]]]);
提示
如果你想定制默认的失败处理,使用failure_handler
选项,创建一个类实现AuthenticationFailureHandlerInterface。