vue在Cookie和对localStorage的封装中存储登录用户的token、用户名等信息

3 篇文章 0 订阅

在系统登录后将用户登录的token、用户名信息分别存储至Cookie和localStorage中,便于系统后续不同用户权限的控制。

一、存储在Cookie中的文件封装

在src的utils中新增auth.js文件,文件代码为:

import Cookies from 'js-cookie';

const TokenKey = 'Authorization';

export function getToken () {
	return Cookies.get(TokenKey);
}

export function setToken (token) {
	return Cookies.set(TokenKey, token);
}

export function removeToken () {
	return Cookies.remove(TokenKey);
}

let thirdPartyToken = 'thirdPartyToken';

export function getThirdPartyToken () {
	return Cookies.get(thirdPartyToken);
}

export function setThirdPartyToken (token) {
	return Cookies.set(thirdPartyToken, token);
}

export function removeThirdPartyToken () {
	return Cookies.remove(thirdPartyToken);
}

二、 存储在localStorage中的文件封装

在src的utils下新增localStorage.js文件:



const CryptoJS = require('crypto-js');
const storage = window.localStorage;
const key = CryptoJS.enc.Utf8.parse('7e^V9FLMatcyX0kA').toString();
const iv = CryptoJS.enc.Utf8.parse('kr6V%xV&tQj8kH13').toString();

export default {
	set(name, value) {
		if (typeof value === 'object') {
			value = JSON.stringify(value);
		} else {
			value = JSON.stringify({ myCacheValue: value });
		}
		// Triple DES 加密
		let encrypted = CryptoJS.TripleDES.encrypt(value.toString(), key, {
			iv: iv,
			mode: CryptoJS.mode.CBC,
			padding: CryptoJS.pad.Pkcs7,
		}).toString();
		storage.setItem(name, encrypted);
	},
	get(name) {
		let temp = storage.getItem(name);
		if (temp === null) {
			return null;
		}
		// Triple DES 解密
		let decrypted = CryptoJS.TripleDES.decrypt(temp, key, {
			iv: iv,
			mode: CryptoJS.mode.CBC,
			padding: CryptoJS.pad.Pkcs7,
		});
		// 转换为 utf8 字符串
		decrypted = CryptoJS.enc.Utf8.stringify(decrypted) || temp;
		let obj = JSON.parse(decrypted);
		if (obj.myCacheValue) {
			return obj.myCacheValue;
		}
		return obj;
	},
	clear(name) {
		if (name) {
			storage.removeItem(name);
		} else {
			storage.clear();
		}
	},
	clearExcept(array) {
		if (!array) {
			this.clear();
		} else {
			let temp = [];
			for (let i = 0; i < array.length; i++) {
				let val = this.get(array[i]);
				if (val) {
					temp.push({ name: array[i], val: val });
				}
			}
			this.clear();

			for (let i = 0; i < temp.length; i++) {
				this.set(temp[i].name, temp[i].val);
			}
		}
	},
};

三、分别在Cookie和localStorage中存储相关信息

在登录的vue文件中引入设置token的方法:

import { setToken } from '../../utils/auth'

在登录的点击事件方法中存入token :

localStorage.setItem方法即为将相关信息存储在localStorage中;

setToken方法为将token 存储在cookie中。

// 登录事件方法
submit() {
			if (this.checkInput()) {
                // 拼接接口所需的参数
				let password = md5(this.password)
				let formData = new FormData()
				formData.append('username', this.username)
				formData.append('password', password)
                // 调用接口
				login(formData).then((res) => {
					if (res.data.code == 200) {
                        // 存储在本地
						localStorage.setItem('userToken', res.data.data.token)
						localStorage.setItem('username', this.username)
						localStorage.setItem('roleId', res.data.data.roleId)
                        // 存储在Cookie中
						setToken(res.data.data.token)

						// this.$message.success('登录成功')
						this.$router.push({ path: '/xxx' })
					} else {
						this.$message.warning('登录失败')
					}
				})
			}
		},


checkInput() {
			if (!this.username) {
				Message('请输入用户名')
				return false
			} else if (!this.password) {
				Message('请输入密码')
				return false
			} else {
				return true
			}
		},

四、查看是否设置成功

设置完成之后,重新登录并打开F12查看Application中的Cookie:

 设置完成之后,重新登录并打开F12查看Application中的localStorage:

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 项目,可以使用 token、session 和 cookie 进行用户认证和授权。 1. Token Token 是一种无状态的认证方式,客户端通过用户名和密码向服务器发起请求,服务器验证成功后生成一个 token 并返回给客户端,客户端储存 token 后在每次请求时携带该 token,服务器通过验证 token 来识别用户身份。 在 Vue 项目,可以使用 axios 库进行网络请求,并在请求头添加 token: ```javascript axios.defaults.headers.common['Authorization'] = `Bearer ${token}` ``` 2. Session Session 是一种有状态的认证方式,用户登录后,服务器会在后端为该用户创建一个 Session ID,并将该 ID 存储在 session ,然后将该 ID 返回给客户端,客户端在每次请求时携带该 Session ID,服务器通过验证 Session ID 来识别用户身份。 在 Vue 项目,可以使用 axios 库进行网络请求,并在请求头添加 Session ID: ```javascript axios.defaults.headers.common['Cookie'] = `JSESSIONID=${sessionId}` ``` 3. Cookie Cookie 是一种客户端存储的认证方式,客户端在登录后,服务器会返回一个包含认证信息Cookie,客户端在每次请求时都会携带该 Cookie,服务器通过解析 Cookie 来识别用户身份。 在 Vue 项目,可以使用 js-cookie 库进行 Cookie 的设置和读取: ```javascript import Cookies from 'js-cookie' // 设置 Cookie Cookies.set('token', token) // 读取 Cookie const token = Cookies.get('token') ``` 以上是在 Vue 项目使用 token、session 和 cookie 进行用户认证和授权的方法,具体使用哪种方式,可以根据项目的需求和安全性来选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值