当前位置: 首页 > 工具软件 > Token Field > 使用案例 >

什么是token/token如何使用

谭志用
2023-12-01

什么是token

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

token的存储

token可以存到数据库中,但是有可能查询token的时间会过长导致token丢失(其实token丢失了再重新认证一个就好,但是别丢太频繁,别让用户没事儿就去认证)。

为了避免查询时间过长,可以将token放到内存中。这样查询速度绝对就不是问题了,也不用太担心占据内存,就算token是一个32位的字符串,应用的用户量在百万级或者千万级,也是占不了多少内存的。

token的加密

token是很容易泄露的,如果不进行加密处理,很容易被恶意拷贝并用来登录。加密的方式一般有:

在存储的时候把token进行对称加密存储,用到的时候再解密。
文章最开始提到的签名sign:将请求URL、时间戳、token三者合并,通过算法进行加密处理。
最好是两种方式结合使用。

还有一点,在网络层面上token使用明文传输的话是非常危险的,所以一定要使用HTTPS协议。

App登录

除了布局之外,登录功能也是项目的一大难点,主要说一下token

第一步:token
在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。主要作用是确认用户的身份,帮助用户保护个人信息。

使用起来十分简单,只需要在发送登录请求时将后台返回的token令牌保存到本地就可以了

 window.sessionStorage.setItem("token", data.data.remember_token);

一般使用的sessionStorage,相对于 localStorage来说更加的安全
第二步:token验证
获取token后需要验证在请求拦截中进行本地token的验证,如果存在将其存入到请求头中

axios.interceptors.request.use((config) => {
    // token验证请求
    if (window.sessionStorage.getItem('token')) {
        config.headers.Authorization = ${window.sessionStorage.getItem('token')}
    }
    return config
})

如果在用户在同一页面存在时间过久没有操作就说明用户离开了,为了防止其他人获取用户信息需要在响应拦截进行验证

axios.interceptors.response.use(config => {
    // token验证响应
    if (config.data.code == 400) {
        window.sessionStorage.removeItem("token")
    }
    return config
})

当用户没有进行登录时需要强制跳转到登录页面进行登录使用路由钩子进行跳转

if ( !window.sessionStorage.getItem("token")) {
      next("/Login")
  }
 类似资料: