第三方登录和第三方账号绑定

一、什么是第三方登录

第三方登录就是利用用户在第三方平台上已有的账号快速完成自己应用的登录或注册功能。

第三方登录的优点:

  1. 对用户而言: 简单、方便、快捷、深受用户喜欢。

  2. 对网站而言: 简化注册或登录流程,获取海量新用户。

普通本地登录:

用户存在本系统的数据库里,系统去数据库查询,进行校验,校验通过则登录成功;

(普通登录的流程图)

三方登录:

用户存在第三方系统的数据库里,如果想要成功登录本地系统,必须把第三方系统的用户转化为自己的用户,言外之意(必须获取第三方系统的用户信息,隐式的、无感知的注册到自己的系统里)。

(第三方登录的流程图)

OAuth2.0介绍 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。

资源:

用户的账号信息(头像、昵称、手机号、邮箱、星座.....) QQ号

资源拥有者:

用户本人(用户拥有账号、头像、昵称等信息)

资源服务器: QQ的服务器

存储用户信息的一个系统(此处可以理解是qq或者gitee)

客户端: 网易云,百度

想要获取资源的一方(此处理解为baidu或者本地维数公寓系统)

授权服务器: QQ的服务器

服务器在成功验证资源所有者并获得授权后向客户端颁发访问令牌 (授权服务器可以是与资源服务器相同的服务器,也可以是单独的实体单个授权服务器可以发布多个资源服务器接受的访问令牌)

(操作实现的具体流程图)

gitee登录:https://www.processon.com/view/link/638a9ffb1e08536bffa2cb13

二 .第三方绑定

gitee绑定:https://www.processon.com/view/link/63ad88ab5653bb5a50708c1d

三,总结

第三方登录:

定义:用户通过授权,基于用户已有的第三方平台的帐号和密码来快速登录的功能,用户都无需再进行注册。
        

操作流程

  1. 首先获取授权码
  2. 然后根据授权码获取到用户信息
  3. 然后解析用户信息
    (个人空间地址, 昵称,头像, 主键)
  4. 判断之前是否已经注册过了
  5. 如果之前没有注册过 ,执行注册(注册就是添加insert)
  6. 如果之前已经注册过   则更新这个人 的昵称和头像
  7. 加密用户信息 得到token, 把token放入cookie, 用response返回给浏览器  并且设置30分钟有效期
具体的代码操作流程

注意:如果报500,需要先登录,原因是提前获取到了User,

正确的应该是通过登录操作获取到User;在进行判断与添加修改存session

第三方账号绑定

操作流程

  1. 首先获取授权码
  2. 然后根据授权码获取到用户信息
  3. 然后解析用户信息
    (个人空间地址, 昵称,头像, 主键)
    
    
  4. TokenUtils.获取到对象的方法,set参数到对象中
  5. 将用户信息与数据库中的信息进行绑定(update)操作
  6. 合并完两个账号后需要重新制作令牌
  7. 要注意update操作前数据库需要提前预留要添加的字段
具体的代码操作流程

四、拦截器

  快捷键:Alt+insx选择 Ctrl+l中第一个方法

当第三方登录时拦截器在spring-mvc中要放开code.do

具体流程

1.先实现接口 HandlerInterceptor 生成方法 

2.然后从浏览器获取到cooki过滤出token

 这里已经被工具类封装直接调用 TokenUtils.getTokenFromRequest()方法将request放入就OK

3.然后用JWT工具类验证获取到的Token是否有效

4.如果无效就重定向到登录页面方法,

5.最后的

 HandlerInterceptor.super.preHandle(request, response, handler)

意思是如果还有其他拦截器就跳转到其他拦截器进行判断,默认为true

五、工具类中的方法简介

1.GiteeUtils

2.Md5Utils

3.TokenUtils

4.JwtUtils

六、扩展

1.登录成功后 把对象放入 Redis(固定格式代码)

首先要存放配置文件strong-redis和spring-ioc配置信息

 并且注意要依赖注入

然后调取方法,opsForValue().set(key,value);

key存放的是用户的name,value存放的是json输出后的用户对象,

如果要将设置过期时间为cookie的过期时间

就调用TimeUnit(java.util.concurrent) 中的MINUTES方法

redisTemplate.opsForValue().set(us.getName(), JSON.toJSONString(us),30, TimeUnit.MINUTES);

set是存入,key是自己的用户名,value是js输出的对象,30是时间,TimeUnit.MINUTES是时间的格式,这里是分钟。

2.给用户发短信 告诉用户什么时间登录了(固定格式代码)

使用HttpClient调用阿里云或其他发短信接口,发送短信(用户在什么时间登录系统)

调用kun包里的工具类 ZzyUtils.sendSms(只有这一个方法);

phone是接受的手机号,randomCode是发送的验证码,minute是有效的时间
phone – 电话号码 randomCode – 4位随机验证码(可写静态) minute – 有效时间,单位分钟

七、演示效果时注意

1.删除数据库里已存好的字段数据

2.移除已存好的Token

3.删除浏览器里的cookie

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值