登录认证功能开发

一般情况有用户交互的项目都有认证授权功能,首先我们要搞清楚两个概念:认证和授权。

认证: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等。

授权:则是该用户登录系统成功后当用户去点击菜单或操作数据时系统判断该用户是否有权限,有权限则允许继续操作,没有权限则拒绝访问。

1. 小程序认证

1.1 小程序登录官方参考

我们先参考微信官方提供的小程序登录流程先大概知道小程序认证流程需要几部分,如下图:

(文档地址:小程序登录

从图上可以看出小程序认证流程需要三部分:

小程序:即前端程序

开发者服务器:后端微服务程序。

微信接口服务:即微信服务器。

1.前端调用wx.login()获取登录凭证code

2.前端请求后端进行认证,发送code

3.后端请求微信获取openid,发送appid、app密钥、code参数,微信返回openid

4.后端生成认证成功凭证返回给前端。

5.前端存储用户认证成功凭证

1.2 小程序认证流程

小程序的认证流程:(包括获取用户手机号)

前端请求微信获取登录凭证code。

前端携带登录凭证code请求微服务认证接口.

微服务请求微信获取openid,初次认证将openid记录在数据库common_user表中。

前端请求获取手机号拿到token令牌。

前端携带手机号token令牌请求微服务查询用户手机号。

微服务请求微信查询用户手机号并更新到数据库中。

2. 手机验证码认证

2.1 实现方案

1、提供发送验证码接口

传入手机号,向手机号发送验证码并将验证码存储在redis。

存储到redis使用string类型。

验证码key: PHONE:CODE:VERIFY_CODE_手机号

验证码 value: 6位随机数

验证码有过期时间:默认300秒

2、提供校验验证码接口

传入手机号及用户输入的验证码。 根据key从redis取出正确的验证码和用户输入的进行对比,一致说明验证码输入正确,否则输入错误,校验通过删除验证码。

3、对发送验证码接口进行限流,避免频繁发送验证码。

首先在前端操作频率控制,60秒内只允许发一次。

在后端通过对发送验证码接口进行限流。

2.2 手机验证码认证流程

手机验证码认证流程如下:

输入手机号。

点击发送验证码。

输入验证码,点击登录。

认证过程会先校验验证码是否正确,如果验证码正确再根据手机号查询数据库表是否存在相应记录且用户未被冻结,全部成功则认证通过。

3. 账号密码认证

通过用户名查询数据库获取加密后的密码,使用相同的加密算法对输入的密码进行加密,并与数据库中的加密密码进行对比。

如果认证通过,生成JWT(JSON Web Token)并返回给客户端,客户端后续请求将携带该Token。

4. 认证通过的用户信息保存

用户信息保存在两个地方:

前端的storage中:

后端的ThreadLocal中:

用户认证通过后端生成token返回给前端由前端保存,前端每次请求微服务会携带token访问。

网关收到前端的请求进行token校验,token不合法直接返回失败信息,token合法解析出用户信息放在http的head中继续请求微服务,在微服务中解析http头信息中的用户信息,写入ThreadLocal方便应用程序使用。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyt涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值