KU案例2之06Twig Security和IS_AUTHENTICATED_FULLY

之前我们用一个链接完成了注销工作。我知道了symfony退出是这么的容易。只要logout健在防火墙下并且我们指定一个/logout路由,我们就能够看到他工作了。这些操作symfony都会在幕后处理。

在Twig里使用:is_granted

打开首页模版,并添加注销链接。使用Twig的path函数并且将路由名称传入,他就会生成URL。

如果没有登录我们是不希望让logout显示的。is_granted通过一个特殊的字符串IS_AUTHENTICATED_REMEMBERED来判断是否显示。

暂且还算完美!

级别:IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_FULLY

is_granted是如何在twig里检测安全性,有很多方式,我们可以通过IS_AUTHENTICATED_REMEMBERED,也可以通过普通的角色方式ROLE_USER和ROLE_ADMIN。所以说除了检查用户是否已给定角色,symfony还有这3个特殊的安全检查:

  • 首先,IS_AUTHENTICATED_REMEMBERED是表示已登录的所有用户。可以记录普通的登录,还可以记录选择过remember me状态的用户,此用户会有一个“remember me” cookie。
  • 其次,IS_AUTHENTICATED_FULLY会更加强大一些。如果你登录了你就会拥有他,如果你有一个“remember me” cookie,你就没办法使用他了。
  • 最后,IS_AUTHENTICATED_ANONYMOUSLY是给所有用户的,即使你没有登录。既然每个人都是这样,他好像一文不值,但它确实还是有一些作用的,就是如果你需要“白名单的url”(例如login是任何人都可以访问的)它应该是可以公开的,所以这就是他的作用。

我们使用IS_AUTHENTICATED_REMEMBERED,来让每一个登录的人或者记住密码的人来显示注销。

为没有登录的人显示登录链接

你很可能在所有的页面都使用IS_AUTHENTICATED_REMEMBERED,但是在结账页面,IS_AUTHENTICATED_FULLY会给你真正的安全。如果用户是IS_AUTHENTICATED_REMEMBERED并且访问支付的页面,那么他们会被重定向到登录页。

发表评论