目录
QQ登陆
接上篇文章,在跳转的时候报错
主要原因是回调地址出错。
默认的回调地址
实际注册之后给我们的回调地址是
首先修改本地的访问地址
修改访问的地址
之前的分析我们也知道,默认使用的是/auth/qq,所以我们需要自己写过滤器
上面的知识内部配置,外部的配置也得配置
启动登陆
查看日志
为什么会跳转到/sigin呢?我们分析一下它的流程
在OAuth2AuthenticationService类中判断是否code非空的逻辑:首先当用户点击授权码的时候,跳转链接/qqLogin/callback.do,当扫描验证完之后,跳转回来的时候还是/qqLogin/callback.do,第一次跳转是没有携带code,就会执行if的语句,第二次验证完毕携带有code,就会执行if else里面的内容
打好断点,重新启动
发送了一个post授权请求
获取到的post请求通过json格式接收,但是返回回来的是text/html
然后就会报异常
返回null
token就会返回一个null
到失败的处理器里面
然后就会进入到它的失败处理器里面
然后就重定向到/signin,但是由于我们没有对其授权所以就报错
在这里面没有处理text/html的信息请求,所以我们得自己写一个RestTemplate
创建QQOAuth2Template,重写createRestTemplate方法
但是我们可以看到qq返回的并不是json格式,我们还得再进行处理
所以我们需要重写postForAccessGrant
记得设置为true,因为qq授权是需要五个参数的
修改为自己写的template
重新启动,扫描完毕
成功之后就会跳转到/signup
进入到了SocialAuthenticationProvider
尝试着通过userid去数据库获取用户信息,因为是第一次登陆,数据库里面没有数据,所以返回的是null
会报错异常
处理注册逻辑,调转/signup路径问题
上面问题可知,social将我们导向了一个signup的注册路径
接着上面就会抛出异常BadCredentialsException
异常会被SocialAuthenticationFilter处理
跳转到注册的url上,也就是/signup路径上
创建注册页
配置注册页属性
上面的配置是属于框架内部的配置,下面的类似于前后端分离的外部配置,覆盖内部配置
添加授权
将注册路径放入到过滤器中
重新启动,就会写到数据库里面
第二次登陆就会进入到主页
上面那个是需要进入到注册页面,但是一般情况下是后台直接帮你注册,相当于第三方登陆之后直接进入到主页
我们之前分析了,主要是第一次的时候到数据库里面查没有查到所以就会跳转到注册页面
我们可以看到它在执行查询
从代码中我们可以看到,重点connectionSignUp实现时候返回newUserId,所以我们需要手动去添加
启动