注册登录流程图,一文搞懂注册登录流程图?

营销圈公众号引导关注

前言

结合网关相关知识食用更佳

业务图解

注册登录流程图,一文搞懂注册登录流程图?

流程解读

  • 客户端-登录界面(通常手机验证码登录) 1.填写手机号 2.发送验证码 3.填写验证码 4.勾选新用户自动注册
  • 服务端-用户验证 1.验证账号验证码是否正确 2.验证用户是否存在(不存在出初始化用户信息) 3.完成验证生成token 4.将token返回给客户端

用户信息设计

字段 描述 类型 是否唯一
telephone 手机号 varchar
nickname 昵称 varchar 根据业务决定是否可重复
account 账号 varchar
password 密码 varchar
create_time 创建时间 datetime
modify_time 修改时间 datetime
…省略小程序授权码等等、根据自身业务进行增加

验证流程图解

注册登录流程图,一文搞懂注册登录流程图?

关于token过期时间

关于业务请求token验证

关于登出操作

关于匿名请求(免登录)

方案1:授权token,限制单位时间请求次数

技术实现

  • 1.提供一个授权token管理页面,主要管理token使用者,token的值,单位时间访问次数(如每分钟60次)
  • 2.增删改查,将授权token存放到缓存中,使用map进行存储,key为token,值为每分钟访问次数
  • 3.单位时间计数缓存,过期时间为1分钟

注册登录流程图,一文搞懂注册登录流程图?

请求次数检查代码实现


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * 授权token请求限制缓存
 *
 * @author 热黄油啤酒
 * @since 2021-11-01
 */
@Component
public class AuthTokenRequestLimitCache {

    @Autowired
    private RedisTemplate<String, Integer> redisTemplate;

    private static final String AUTH_TOKEN_LIMIT_KEY_PREFIX = "auth_token_limit";

    /**
     * 请求次数+1并检查是否超限
     *
     * @param token
     * @return 是否放行 
     */
    public boolean incrementWithCheck(String token) {
        // 1.获取token请求次数限制,获取为null代表授权配置已被修改,此token已经不具备权限
        Integer limit = getLimit(token);
        if (limit == null) {
            return false;
        }
        // 2.组装缓存key,读取缓存
        String key = String.join(":", AUTH_TOKEN_LIMIT_KEY_PREFIX, token);
        Integer count = redisTemplate.opsForValue().get(key);
        // 3.没有值代表一分钟内没有请求产生了
        if (count == null) {
            // 初始化值
            redisTemplate.opsForValue().increment(key);
            // 设置过期时间
            redisTemplate.expire(key, 1L, TimeUnit.MINUTES);
            return true;
        }
        // 自增并获取当前值 大于限制的话 返回false 网关过滤器返回提示信息(如请求过于频繁)
        Long inc = redisTemplate.opsForValue().increment(key);
        return inc <= limit;
    }

    /**
     * 获取限值
     *
     * @param token
     * @return
     */
    public Integer getLimit(String token) {
        Object limit = redisTemplate.opsForHash().get("auth_token_limit", token);
        return limit == null ? null : (Integer) limit;
    }
}
复制代码

方案2:请求路径正则校验

关于黑名单

  • 1.用户管理页面提供一个拉黑的按钮,拉黑后,这些用户的id会存储到一个set集合中去
  • 2.登录时候检查用户是否在黑名单中,是则拒绝登录并提示
  • 3.如果用户已经登录后进行拉黑操作,网关会在鉴权通过后检查用户是否在黑名单中,是则删除token对应缓存,返回401,401就会跳到登录页,步骤2就会进行拦截。

总结

好了,这篇文章的内容营销圈就和大家分享到这里,如果大家对网络推广引流和网络创业项目感兴趣,可以添加微信:Sum8338 备注:营销圈引流学习,我拉你进直播课程学习群,每周135晚上都是有实战的推广引流技术和网络创业项目课程分享,当然是免费学!

版权声明:本站部分文章来源互联网用户自发投稿,主要目的在于分享信息,版权归原作者所有,不承担相关法律责任。如有侵权请联系我们反馈邮箱yingxiaoo@foxmail.com,我们将在7个工作日内进行处理,如若转载,请注明本文地址:https://www.yingxiaoo.com/132032.html