关于登录的那些事

废话:嗯...,最近在写登录方面的功能,就想总结下关于vue项目登录的一些小的知识点和逻辑,有写的不全或不多的,望多包涵和指正。

通常我们在搭建一个项目之后,最先需要处理的就是登录和注册的逻辑了,这里以vue项目为例

在前后端完全分离的情况下,vue实现token验证大致的思路:

当我们第一次登录时候,调用后端接口,发送用户名和密码给后端,当登录过后,操作该系统的其他业务功能时,后端怎么来判断操作的这个人就是刚刚登录的那个人呢?不能每次操作需要掉接口的时候都要登录吧。于是在第一次登录的时候,后端会返回一个token,在后面操作调接口的时候,前端会把这个token传给后端,后端将接收到的token与数据库中的token对比,如果匹配就可以继续操作,不匹配就返回给前端401,前端跳转到登录页面。

那么前端是是如何保存后端的传过来的token,并在每次请求的时候都将token传给后端的

1)后端向浏览器中添加cookies

第一次登录后,后端在response header中添加一个set-cookies属性,格式是key=value,设置token到浏览器的Cookies里存起来,这样浏览器的Cookies就有值了;

登录系统后请求接口中,Request Header中添会自动加Cookie属性,里面的格式也是key=value

 2.后端设置token,前端从token取回

登录后后端把token在response.headers.token中返回,前端用localstorage保存或用js-cookie手动保存在cookie中,在下一次请求接口的时候,在拦截器里统一将token值设置为header的authorization属性

import Cookies from 'js-cookie' // 引入js cookie

// 创建axios实例

const service = axios.create({
baseURL: process.env.API_ENDPOINT,

withCredentials: true,

timeout: 1000 * 60 * 60

})

// 请求拦截器

service.interceptors.request.use(config => {
// 2. 使用token信息

const TOKEN = Cookies.get('TokenKey');

config.headers['authorization'] = TOKEN;

}, error => {
return Promise.reject(error)

})

// 响应拦截器

service.interceptors.response.use(response => {
// 1. 储存token信息

const TOKEN = response.headers.token;

Cookies.set('BIM-TOKEN', 'Bearer ' + TOKEN);

}, error => {
return Promise.reject(error)

})

3.token也可能直接在返回的内容中,然后在每个请求的时候以参数的方式带过去

 

posted @ 2021-08-09 16:19  程序员瑶琴  阅读(63)  评论(0编辑  收藏  举报