EverydayOneCat
series No.2(p2) of 🎄
首页登录和注册
1.单点登录
登录是老生常谈的业务了,在前面的项目中都有所介绍,这里我们使用分布式系统常见的单点登录实现。
所谓单点登录,简单来说就是在一个系统(微服务)中登录了,访问同一企业的其他模块则不需要登录来了。
单点登录常见的三种实现方式:
session广播机制
这种在小系统中实现简单,但是若是集群服务多了,则效率极差
使用cookie+redis实现
- 用户登录时,在redis生成唯一key,value中存储用户数据
- 同时把redis中那个唯一key存到cookie中发送给客户端
- 客户端访问其他模块时会带着cookie,根据cookie和redis做判断,若一样则可得到用户数据(即已登陆)
使用token实现
- 进行登陆后将用户信息按照规则生成token字符串通过cookie或者地址返回给客户端
- 客户端访问其他模块时会带着上面返回的token字符串,可以根据字符串获取用户信息
- 注:基于微服务开发,选择token的形式相对较多,因此我使用token作为用户认证的标准
之前品优购我们采用的是第二种方式实现登录,此次我们采用第三种。
2.用户登录接口
2.1整合JWT
上面我们说token字符串是采用一定的规则生成的,同时里面包含用户信息。这里介绍的JWT就是一种生成token的规则。
在common_utils模块中添加jwt工具依赖
1 | <dependencies> |
创建JWT工具类JwtUtils
1 | import io.jsonwebtoken.Claims; |
2.2登录接口实现
创建LoginVo用于登录数据封装
1 |
|
创建controller编写登录方法
1 |
|
创建service接口和实现类
1 |
|
3.用户注册接口
3.1整合阿里云短信服务
在用户注册时我们需要用到短信验证码避免无效注册占用资源
(1)在service模块下创建子模块service-msm,配置application.properties(和之前差不多)
(2)阿里云短信帮助文档:https://help.aliyun.com/product/44282.html?spm=5176.10629532.0.0.38311cbeYzBm73
(3)在service-msm的pom中引入依赖
1 | <dependencies> |
(4)编写controller,根据手机号发送短信
1 |
|
(5)编写service
1 |
|
3.2注册接口实现
创建RegisterVo用于注册数据封装
1 |
|
controller编写注册方法
1 | //用户注册 |
service实现逻辑
1 |
|
根据token获取用户信息接口
1 | //根据token获取用户信息 |
4.注册前端实现
4.1安装插件
(1)执行命令安装
1 | npm install element-ui |
(2)修改配置文件 nuxt-swiper-plugin.js,使用插件
1 | import Vue from 'vue' |
4.2定义接口
在api文件夹中创建注册的js文件
1 | import request from '@/utils/request' |
4.3注册页面
register.vue
1 | <template> |
实现点击获取验证码倒计时效果和校验验证码
1 | data() { |
5.登录前端实现
(1)在api文件夹中创建登录的js文件,定义接口(略)
(2)安装js-cookie插件:npm install js-cookie
(3)实现登陆方法:
1 | //登录 |
(4)在request.js添加拦截器,用于传递token信息
1 | //第三步 http request 拦截器 |
(5)default.vue页面显示登录之后的用户信息
1 | <!-- / nav --> |
1 | //显示登录信息 |
微信扫描登陆
1.OAuth2介绍
2.微信扫描二维码
(1)application.properties添加相关配置信息(尚硅谷提供的)
1 | # 微信开放平台 appid |
(2)创建常量类读取(略)
(3)微服务中创建api包并创建Controller
1 |
|
授权url参数说明
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识 |
redirect_uri | 是 | 请使用urlEncode对链接进行处理 |
response_type | 是 | 填code |
scope | 是 | 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即 |
state | 否 | 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验 |
实现效果:
3.获取扫描人信息
添加依赖
1 | <!--httpclient--> |
Controller编写方法
1 | //登陆成功得到用户信息 |
4.前端显示用户登录信息
修改default.vue页面脚本
1 | export default { |
最终效果
结语
劲夫:晚上8点,结束在母司一天的辛苦,坐上母交车回去。到站是一个母园,顺便在旁边的母厕释放一下,走了2母里回到母寓,拿出一天前买的1母斤肉,走回房间,打开游戏,顺便日女辅助