登录认证功能开发

ops/2024/10/19 21:41:21/

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

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

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

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方便应用程序使用。


http://www.ppmy.cn/ops/104558.html

相关文章

黑马程序员Python机器学习|1机器学习概述

一 人工智能概述 1.什么是人工智能 2.机器学习和人工智能,深度学习的关系 机器学习的目的:用机器来模仿人类学习以及其他方面的智能。 数据库存储历史数据(离线数据),数据挖掘建立在过去数据的基础上,找数据…

一次bad udp checksum故障

用户反馈 client 访问某服务 的 udp 端口 1107 访问异常,使用tcpdump在服务端抓包时发现,客户端发给服务端的udp报文可以接收到,但服务端发给客户端的udp报文会报错bad udp cksum #tcpdump -i any -nneevvv udp and port 1107 11:01:57.774…

面试题集锦: golang

文章目录 一、Golang基础:1. Golang有哪些数据类型2. Go程序中的`包`是什么3. 什么是Goroutine?4.如主动停止Goroutine?5. 如何在运行时检查变量类型:6. Go两个接口之间可以存在什么关系:7. Go当中同步锁有什么特点? 作用是什么?8. Go语言中`cap函数`可以作用于哪些内容:9.…

<meta name=“robots“ content=““>介绍

是一个 HTML 元素,用于指示搜索引擎爬虫(如 Googlebot)如何处理网页的索引和抓取。它可以控制搜索引擎对页面的访问和索引行为。 content 属性可以包含以下指令: index:允许搜索引擎索引该页面(默认行为&…

Transformer 动画揭秘:数据处理的四大关键技术

0背景 Transformer 大模型,一种基于自注意力机制的神经网络架构,已被广泛应用于各种自然语言处理任务,比如:机器翻译、文本摘要、生成问答等。 从端到端的角度来看,Transformer 大模型中数据的处理流程主要包括四个阶…

电路笔记(通信):UART Universal Asynchronous Receiver/Transmitter+电缆信号完整性改善

UART协议概述 URAT(Universal Asynchronous Receiver/Transmitter)协议用于在两个设备之间进行数据传输。UART协议因其简单性和广泛应用而成为串行通信的一个基本选择,适合各种数据传输需求的应用。 异步传输 定义: UART是一种异步串行通信…

三代纳米孔直接测序:dorado 碱基识别结果 SAM 、BAM文件格式详解

dorado结果 SAM 、BAM文件格式 头部信息 HD VN:1.6 SO:unknown - 版本和排序顺序。PG ID:basecaller PN:dorado VN:0.2.43fc2b0f CL:dorado basecaller - 程序信息,包括ID、名称、版本和命令行。 DS:gpu:Quadro GV100 - 使用的GPU类型。 读组头部信息 RG ID &l…

鼠标在虚拟机virtualbox里面不显示/消失,如何解决?

鼠标在虚拟机virtualbox里面不显示/消失,如何解决? 故障现象: 能够感知到鼠标在virtualbox里面的CentOS8里面在动,但是看不到鼠标的形状: 解决办法: 虚拟机关机-- 设置--系统--指点设备,从PS…