token是后端给前端的一个二维码, 这个二维码一般是暗码,  前端拿着这个二维码到后端, 后端便可以通过这个二维码得知用户是否登录过, 用户是谁等信息(具体什么信息,是后端在返回token时候设置的);

nodejs里的插件: jsonwebtoken;使用方法:

var jwt = require('jsonwebtoken');
var token = jwt.sign({ foo: 'bar' }, 秘钥);
这个秘钥一般都是秘钥文件的读取结果,也就是放到秘钥文件里储存.
接着就是通过res将这个token返回给前端
app.post('/api/login',  (req, res) =>{
const { userName,password} = req.body;
login(userName, password,function(data){
if(data[0]){
bcrypt.compare(password, data[0].password).then(function(result) {
if(result){
fs.readFile('./TOKEN/TOKEN_EV',(err,data)=>{
const serateKey = data.toString();
res.status(200).json({
userName,
token: jwt.sign({ id: data[0].id}, serateKey)
})
}) }else{
res.status(422).json({message:'密码不匹配'})
}
}); }else{
res.status(422).json({message:'用户名不存在'})
} })

  

 
前端拿到token后,可以作为cookie存起来, 这是最方便的. 但是一个不好处就是后端不能跨域获取.
比如百度贴吧(假如地址是www.tieba.baidu.com)的cookie, 百度地图(假设地址是www.ditu.baidu.com)获取不到.
所以,就想了一个办法, 把请求接口的请求头设置一下, 每次请求都会带着这个token了. 页面就利用vue的router进行判断
axios.interceptors.request.use(
config => {
if (localStorage.JWT_TOKEN) { // 判断是否存在token,如果存在的话,则每个http header都加上token
config.headers.Authorization = `token ${localStorage.JWT_TOKEN}`;//这个字符串里的token可以不写
}
return config;
},
err => {
return Promise.reject(err);
});
router.beforeEach(({name}, from, next) => {
// 获取 JWT Token
if (localStorage.getItem('JWT_TOKEN')) {
// 如果用户在login页面
if (name === 'login') {
next('/');
} else {
next();
}
} else {
if (name === 'login') {
next();
} else {
next({name: 'login'});
}
}

  

后端接到前端的请求后, 验证是否带有token
app.get('/api/profile', (req, res) => {
//查看请求头信息
const token = req.headers.authorization.split(' ').pop(); //获取请求头的信息 fs.readFile('./TOKEN/TOKEN_EV', (err, result) => {//读取token的秘钥, 可以把这个秘钥文件存起来, 然后读取后引入,不必每次都读取 if (!err) {
jwt.verify(token, result, (err, decoded) => {
const id = decoded.id;
//这里根据id处理
Profile(id, (data) => {//这是业务层的东西, 读取数据库, 然后返回数据, 不用管 res.json(data[0]) })
});
} else {
res.send(err)
}
});
})

  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

vue+express利用token 完成前后端登录的更多相关文章

  1. 前后端登录注册之node剖析与token的使用状态

    登录模块功能详解 1.用户名密码的格式验证 由前端完成,根据需求自行决定,不加叙述 2.点击提交按钮思路详解 前端将用户名 以及加密后的密码还有验证码输入的内容统一发给后端  由后端和数据库的数据进行 ...

  2. SpringBoot20 集成SpringSecurity02 -> 利用SpringSecurity进行前后端分离的登录验证

    1 SpirngBoot环境搭建 创建一个SpringBoot项目即可,详情参见三少的相关博文 参考博文 -> 点击前往 SpirngBoot项目脚手架 -> 点击前往 2 引入Spirn ...

  3. vue + spring boot + spring security 前后端分离 携带 Cookie 登录实现 只写了个登录

    最近想弄一下vue 所以就自己给自己找坑入   结果弄的满身是伤 哈哈哈 首先我说下 前后端分离  跨域请求  我在网上找了一些  可是都是针对于 spring boot 的 我自己还有 securi ...

  4. Yii框架和Vue的完美结合完成前后端分离项目

    背景说明 本文假设你对Yii和Vue都比较熟悉,至少都在项目里用过,另外笔者新人,以后不定时放一些干货,欢迎程序媛关注 Yii是一个PHP全端框架,典型的mvc的项目结构,后端接口都是一个控制器里放了 ...

  5. nodeJS(express4.x)+vue(vue-cli)构建前后端分离详细教程(带跨域)

    好想再回到大学宿舍,当时床虽小,房随小,但是心确是满的 ----致  西安工程大学a-114舍友们 转载请注明出处:水车:http://www.cnblogs.com/xuange306/p/6185 ...

  6. 基于ThinkPHP 5.0与Vue.JS 2.x的前后端开源开发框架VueThink

    VueThink 项目介绍 VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的 ...

  7. 利用gulp解决前后端分离的header/footer引入问题

    在我们进行前后端完全分离的时候,有一个问题一直是挺头疼的,那就是公共header和footer的引入.在传统利用后端渲染的情况下,我们可以把header.footer写成两个单独的模板,然后用后端语言 ...

  8. Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(2)

    1.restful api介绍 1.前后端分离的优缺点 1.为什么要用前后端分离 1.pc.app.pad多端适应 2.SPA(单页面应用)开发模式开始流行 3.前后端分离职责不清 4.开发效率问题, ...

  9. Django 利用JWT实现前后端分离的Token验证

    一.什么是Token? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器会生成一个Token并将此Token返回给客户端,以后客户端只需带上这个Token前来请 ...

随机推荐

  1. 算法——得到数据流中前K大的数

    用优先队列 public PriorityQueue<Integer> kthLargest(int k, int[]a) { PriorityQueue<Integer> q ...

  2. 【leetcode】1220. Count Vowels Permutation

    题目如下: Given an integer n, your task is to count how many strings of length n can be formed under the ...

  3. 对浏览器如何计算CSS的研究---------------引用

    1. 加载CSS 在构建DOM的过程中,如果遇到link的标签,当把它插到DOM里面之后,就会触发资源加载——根据href指明的链接: 上面的rel指明了它是一个样式文件.这个加载是异步,不会影响DO ...

  4. java实现视频断点上传文件

    一.概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载.在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了.一般断点下载时才用到Range和Content- ...

  5. qtp识别验证码

    花了两天时间才完整的完成识别验证码的登录操作,在网上看到很多关于验证码识别的方法,但是我用的qtp版本比较高级,所以还是要自己花心思研究.po上我的识别验证码的详细历程: 一.读取浏览器中的图片验证码 ...

  6. (53)LINUX应用编程和网络编程之八Linux网络基础

    3.8.1.网络通信概述 3.8.1.1.从进程间通信说起:网络域套接字socket,网络通信其实就是位于网络中不同主机上面的2个进程之间的通信. 3.8.1.2.网络通信的层次 (1)硬件部分:网卡 ...

  7. Spark 2.1.1 源码编译

    Spark 2.1.1 源码编译 标签(空格分隔): Spark Spark 源码编译 环境准备与起因 由于线上Spark On Yarn Spark Streaming程序在消费kafka 写入HD ...

  8. android存储路径问题

    关于存储路径问题,如果是想要存储在应用本身的路径下,如果该应用卸载的时候,对应文件随之卸载, 如果使用的是android level 8以上的版本,采用的是: getExternalFilesDir( ...

  9. spring-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. SRCNN 卷积神经网络

    2019-05-19 从GitHub下载了代码(这里) 代码量虽然不多,但是第一次学,花了时间还是挺多的.根据代码有跑出结果(基本没有改),但是对于数据集的处理还是看的很懵逼,主要是作者的实现都是用类 ...