继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

symfony 用户登录验证身份流程

梦是蓝的
关注TA
已关注
手记 8
粉丝 13
获赞 79
                            symfony 用户登录验证身份流程

symfony中的用户身份验证 是通过防火墙进行的,如果请求信息中没有包含用户的身份信息,或者错误的用户信息,防火墙就会拦截请求,并根据配置跳转相关的页面,(404页面,登录页面等),或者其他的跳转方式。

如果是sf的第三方自带的防火墙类型的话,就是一下几种积木组成的。

1.Firewall listener 2.Token & Token Storage 3. Authentication provider 4.User provider 5.Entry pointer

a.Firewall listener(防火墙监听) 作用:检车用户是否需要做身份验证

首先判断Request对象里面是否包含用户的身份验证信息,如果不包含什么也不做;如果包含,他会将Request里的用户登录信息抽取出来,并创建一个Token .

例子:Symfony\Component\Security\Http\Firewall\BasicAuthenticationListener


b. Token & Token Storage(令牌和令牌存储) 作用:存装用户的信息token

 它分为两中token , 一种是包含用户待验证身份信息的 token,另外一种是包含验证过的用户身份信息的 token,两种可以使同一个对象,但区别在于 待验证 token 里注入的是用户名;验证过的 token 注入的是用户对象。Firewall listener 在创建好待验证 token 之后,用 AuthenticationManager 的 authenticate 方法尝试验证 token。《如果成功,authenticate 方法会返回验证过的 token。最后,将验证过的 token 放到 token storage 里面,就大功告成了》。

例子:Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken


c.Authentication provider(身份验证提供者) 作用:用来处理AuthenticationManager委托的来处理验证的工作。

过程就是:先从待验证 Token 里拿出用户信息,通过 username,利用注入的 User provider 的 loadUserByUsername 方法获取到一个用户,并通过比对获取到的用户信息以及 token 里的用户信息的(比如比对密码),来判断用户是否登录正常。如果正常,创建一个新的 token 并将用户对象注入后返回它。当然如果信息有问题,则会抛出 AuthenticationException 异常。

Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider


d.User provider(用户的供应商)作用:只用来查询用户,不验证用户

这个就像去健身房前台使用的电脑,通过提供额名字,可以从其他地方(不一定是数据库) 查到此名字对应的用户的去哪不信息

例子:Symfony\Component\Security\Core\User\InMemoryUserProvider


e. Entry pointer(入口指针) 作用:定义需要用户认证时,或者用户身份失败时的处理方式。

定义了需要用户认证时,或者用户身份认证失败的时候的处理方式。Entry point 类的 start 方法也是处理 request 参数,返回 response,你可以在这里定义用户是直接显示 401 页面呢,还是跳转到登录页面(小提示:没有规定 401 页面是不可以显示登录表单的哦),还是只返回一个 WWW-Authenticate 的 HTTP 头。

例子:Symfony\Component\Security\Http\EntryPoint\BasicAuthenticationEntryPoint

总结来源 原网址链接:

https://www.chrisyue.com/dig-into-symfony-framework-authentication.html
打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP

热门评论

nb

查看全部评论