技术标签: vue
用户访问网站时,都希望这一次登录完成后,下一次再访问时能够记住其登录的状态,而不是每一次进入都要重新进行登录。因此,本文记录了使用jwt来创建和验证token,以达到记住用户登录状态的过程
安装jwt
npm install jsonwebtoken
封装创建和验证token的方法(server/utils/token.js)
const jwt = require('jsonwebtoken');
const Token = {
encrypt:function(data,time){
//data加密数据,time过期时间
return jwt.sign(data, 'token', {
expiresIn:time})
},
decrypt:function(token){
if (!token) {
return {
token:false
}
}
try {
jwt.verify(token, 'token');
return {
token:true
};
} catch (e) {
return {
token:false,
data:e
}
}
}
}
module.exports = Token;
在登录接口中创建并返回token
const Token = require('./utils/token');
app.post('/user/login', function (req, res) {
const token = Token.encrypt({
id: req.user_id},'15d'); // 15d,有效期
res.send({
success: true, message: '登录成功', data:token});
})
新建验证接口validate(前端可在app.vue中调用此接口进行验证)
app.get('/validate', function (req, res) {
let data = Token.decrypt(req.headers.token); //将请求头的token取出解密
if (data.token) {
res.send('已经登录了');
}else{
res.send('还没登录呢');
}
})
封装操作token的方法(client/utils/token.js)
let setTokenToCookie = (value) => {
var Days = 1; //此 cookie 将被保存 30 天
var exp = new Date();
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
document.cookie = 'my_token =' + escape(value) + ';expires=' + exp.toGMTString();
}
let getCookie = (name) => {
var cookieValue = '';
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
let clearCookie = () => {
setTokenToCookie("");
}
export default {
setTokenToCookie,
getCookie,
clearCookie
};
配置axios请求拦截器,在请求头中携带该token(client/service/http.js)
import Util from '../utils/token'
axios.interceptors.request.use(function (conf) {
const token = Util.getCookie('my_token');
if (token) conf.headers['token'] = `${
token}`;
return conf;
});
在app.vue中发起validate请求,若用户已经登录则跳转到首页,否则跳转 到登录页。
登录时,登录成功后接收到token,调用client/utils/token.js
下的setTokenToCookie
方法,将token存入cookie中。
退出登录时,调用client/utils/token.js
下的clearCookie
方法。
整个大致的步骤就是这样。总结起来就是,前端发起登录请求,登录成功后端创建token并返回;前端将返回的token存储到cookie中,并在每一次请求时将token携带在请求头中,后端拿取请求头中的token进行验证。退出登录时,前端将cookie中的tokne置空。
文章浏览阅读924次。confluent是平台化的工具,封装了kafka,让我们可以更方便的安装和使用监控kafka,作用类似于CDH对于Hadoop。confluent是由LinkedIn开发出的团队成员,基于这项技术创立了新公司ConfluentConfluent的产品也是围绕着Kafka做的。_windows 安装 sasl
文章浏览阅读736次。基于云计算技术的B/S架构的医院管理系统(简称云HIS)_his错误定义按领域划分设计方案
文章浏览阅读2.6k次,点赞2次,收藏4次。和室友一起参加了2018 华为软件精英挑战赛,现在来写写参赛感受吧。很遗憾,都没能进复赛,所以只参加了初赛,江山赛区64强,离进复赛只有一点点,当时江山和西北赛区还流传着,如果在其他赛区就可以进了,都是后话。写这个纯粹记录研究生生活吧。1、初赛赛题由于租户对ECS实例(虚拟机,VM)请求的行为具有一定规律,可以通过对历史ECS实例请求的分析,预测到未来一段时间的ECS实例请求,然后对预...
文章浏览阅读2w次,点赞4次,收藏33次。使用数据库时,有很多种添加数据到数据库的方法,我这里使用的是变量传递数据_bindvalue
文章浏览阅读2.5w次,点赞2次,收藏16次。在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 datatable 中。其实使用 dataset 相当于所使用数据库中数据的副本,保存在服务器的内存中。 ● 注意如下 ado.net 关系: Connection_____Command____DataAdapter____Dataset_vs net dataset
文章浏览阅读1.4k次,点赞4次,收藏24次。MATLAB数字水印处理系统【LSB,界面GUI】摘 要数字水印(Digital Watermarking)技术是我们生活中经常见到的信息隐藏技术。它将一些标识信息(即数字水印)直接嵌入数字载体中,但不影响原载体的使用价值,也不容易被人的知觉系统觉察或注意到。空间数字水印是信息隐藏技术的一个重要研究方向,另一类是频率数字水印。空间数字水印采用最低有效位(LSB)算法,通过修改表示数字图像的颜色或颜..._空域可逆水印篡改定位matlab
文章浏览阅读139次。在 SystemVerilog 中,我们可以使用两种类型的断言:立即断言(Immediate Assertion)和并发断言(Concurrent Assertion)。如果条件为假,则断言失败,仿真停止,并将错误信息输出到仿真日志中。在每个时钟周期之后,我们使用立即断言来验证计数器的值是否按预期递增。如果断言失败,则会输出相应的错误消息,并停止仿真。通过使用断言,我们可以在仿真过程中验证设计的正确性,提高设计的可靠性和调试效率。通过使用立即断言,我们可以在仿真运行时实时检查设计的正确性。_systemverilog立即断言
文章浏览阅读610次。最近在配置服务器相关内容时候,不同的事情导致长时间不操作,页面就断开了连接,不能操作,只能关闭窗口,最后通过以下命令解决。SSH连接linux时,长时间不操作就断开的解决方案:1、修改/etc/ssh/sshd_config文件,如果找到 ClientAliveInterval 0和ClientAliveCountMax 3并将注释符号("#")去掉,将ClientAliveInterval对应的..._三个小时无人 ssh就会断联
文章浏览阅读2.7w次,点赞15次,收藏86次。一 Winhex和相关概念简介1 Winhex是在Windows下运行的十六进制编辑软件,此软件功能非常强大,有完善的分区管理功能和文件管理功能,能自动分析分区链和文件簇链,能对硬盘进行不同方式不同程度的备份,甚至克隆整个硬盘;它能够编辑任何一种文件类型的二进制内容(用十六进制显示)其磁盘编辑器可以编辑物理磁盘或逻辑磁盘的任意扇区,是手工恢复数据的首选工具软件。2 数据恢复概念_please use latin characters
文章浏览阅读1.9k次。介绍SpringMVC如何使用自定义拦截器_springmvc添加过滤器
文章浏览阅读191次。前端之VUE开发学习(其实就是点理论,慢慢补充)。_vue前端开发
文章浏览阅读252次。随便打开一个网页:比如http://www.baidu.com/可以看到在浏览器的标签头上面显示了一个图标,这个图标是:,也就是我们常说的favicon.ico.由于这篇文章主要讨论favicon.ico,以及各个浏览器对其的不同处理,所以还是新建web项目如下:home.html 代码如下:<!DOCTYPE html&g..._微信公众号favicon.ico报错