第三方登录就是利用用户在第三方平台上已有的账号快速完成自己应用的登录或注册功能。
第三方登录的优点:
对用户而言: 简单、方便、快捷、深受用户喜欢。
对网站而言: 简化注册或登录流程,获取海量新用户。
普通本地登录:
用户存在本系统的数据库里,系统去数据库查询,进行校验,校验通过则登录成功;
(普通登录的流程图)
三方登录:
用户存在第三方系统的数据库里,如果想要成功登录本地系统,必须把第三方系统的用户转化为自己的用户,言外之意(必须获取第三方系统的用户信息,隐式的、无感知的注册到自己的系统里)。
(第三方登录的流程图)
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
定义:用户通过授权,基于用户已有的第三方平台的帐号和密码来快速登录的功能,用户都无需再进行注册。
(个人空间地址, 昵称,头像, 主键)
判断之前是否已经注册过了
如果之前没有注册过 ,执行注册(注册就是添加insert)
如果之前已经注册过 则更新这个人 的昵称和头像
加密用户信息 得到token, 把token放入cookie, 用response返回给浏览器 并且设置30分钟有效期
注意:如果报500,需要先登录,原因是提前获取到了User,
正确的应该是通过登录操作获取到User;在进行判断与添加修改存session
(个人空间地址, 昵称,头像, 主键)
快捷键: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
首先要存放配置文件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是时间的格式,这里是分钟。
使用HttpClient调用阿里云或其他发短信接口,发送短信(用户在什么时间登录系统)
调用kun包里的工具类 ZzyUtils.sendSms(只有这一个方法);
phone是接受的手机号,randomCode是发送的验证码,minute是有效的时间
phone – 电话号码 randomCode – 4位随机验证码(可写静态) minute – 有效时间,单位分钟
1.删除数据库里已存好的字段数据
2.移除已存好的Token
3.删除浏览器里的cookie