常见的登录验证方法之token校验

        学习编程的小伙伴都知道,用户登录是一个大部分程序都需要的功能,其写法也多种多样,但是编程思路基本是类似的,今天我们就来介绍其中一种常见的写法,希望初入编程的小伙伴能有所获。

        说到校验,那肯定要先有用户注册和登录

用户注册

        将用户的账号,密码insert进数据库,注意,一般密码会采用加密存储,且不允许逆向解析如:MD5。

        用户注册时可能需要手机号校验验证码,我们一般的思路如下:

1.前端校验手机号格式,通过再调后端发送短信验证码的接口

2.后端最好也加校验,因为前端的校验是可以掠过的,防止不必要的安全问题

3.前端输入手机号,调后端接口校验,判断手机号是否存在,一般异步获取,手机号未注册进入下一步。

4.后端接收到前端手机号生成随机验证码(这个随机数自己写方法生成),存入redis中,手机号为key,验证码为value。同时发送短信到用户手机,这里发短信一般是买短信服务商的短信服务,具体写法建议看对应的官方文档。

5.用户输入验证码进行校验,后端用请求参数中的手机号去redis中拿到验证码,和前端输入的验证码进行比较,相同则通过校验,后进行用户注册操作。

用户登录

        用户输入账号,密码进行登录,这里比较简单,不过多赘述,前后端都要校验对应格式,查询用户是否存在,判断密码是否正确,账号是启用,还是停用,然后更新用户表的登录信息,生成一个随机的token,将用户信息存到redis,key为token,value为用户信息,这里存储的东西视业务需求而定,登录成功返回token给前端。

登录校验

        前端拿到了我们后端返回的token,将其存储在缓存(如:local storage)中,每次请求在请求头带上token,后端校验就是用token去redis中拿值,如果拿到了,就表示校验通过,允许访问对应接口。

        可能不是所有接口都需要登录才能访问,所以需要配置过滤规则,不同语言不同框架的写法可能不同,但其底层的逻辑归根结底就是一个判断,判断访问的接口是否在白名单中,在就不校验,不在就校验是否登录。

        那么是如何设置白名单的呢,很多框架都是有固定写法的,会用就行,这里说说自己写的时候怎么写:先获取请求的全路径,可以是整个前端发送的url,随便是什么,简单处理一下,保留接口的全路径,一般是 /admin/user/userList 这种,以 '/' 为分割符号,转化为数组,获取到最后的userList,比较userList是否存在于白名单中,存在就不需要校验。

以上就是请求头带token的整体编程思路

你可能感兴趣的:(前端,java,后端)