基于token的登录验证服务器,GitHub - zwStar/token-login: 一个基于token的验证登录

token-login

一个基于vue+node+mongodb实现的Jsonwebtoken简单登录功能

该项目只有简单的实现登录功能,可以在此基础上继续开发新的业务

什么是 JWT?

JWT本质上它是一段签名的 JSON 格式的数据。由于它是带有签名的,因此接收者便可以验证它的真实性。同时由于它是 JSON 格式的因此它的体积也很小。

为什么不用session而用JWT的原因?

使用独立登录系统的时候,一般说来,大型应用会把授权的逻辑与用户信息的相关逻辑独立成一个应用,称为用户中心。用户中心不处理业务逻辑,只是处理用户信息的管理以及授权给第三方应用。第三方应用需要登录的时候,则把用户的登录请求转发给用户中心进行处理,用户处理完毕返回凭证,第三方应用验证凭证,通过后就登录用户。

例如这种情况下,用户信息和业务逻辑是分开在2台服务器之上,假设服务器A存放用户信息,服务器B存放业务逻辑,如果采用session存储登录状态,用户登录时在服务器A上验证成功,A服务器保存了session,可是用户接下来的操作是在服务器B上进行,服务器B怎么此时没有session怎么进行判断是哪个用户呢,这种情况下利用session就不是那么方便了。

基于token的鉴权机制

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了

用jwt的流程是这样的

1.用户向服务器A请求登录验证

2.服务器进行验证用户的信息

let {email,password} = req.body;

let LoginPromise = UserModel.find({"email": email, "password": $.md5(password)}); //返回一个promise对象

//如果验证成功 利用jsonwebtoken生成token

module.exports.createToken = function (email) { //创建Token

const token = jwt.sign({

email

},

'secret', {

expiresIn: '10s' // 过期时间 这里只设置10s

});

return token;

};

3.客户端接受token 把token存放到cookie里面

Cookies.set('Admin-Token', data.data.token);

4.用户向服务器B进行业务操作 就会携带该token

5.服务器B通过请求头获取token

module.exports.checkToken = function (req, res, next) { //从请求cookie中 检查token的状态信息

let re = /Admin-Token=(.+)/;

let token = req.headers.cookie.match(re)[1]; //从cookie中提取出token

let decoded = jwt.verify(token, 'secret', function (err, decoded) { //jwt解析

if (err) {

console.log(err);

if (err.message === "jwt expored") {

return result(res, {success:false, msg:'token过期,请重新登录'});

}

return result(res, {error: "登录信息有误"});

}

return result(res, {success:true, msg:'token 正确'});

//console.log(decoded); //获取信息 进行下一步操作

//next();

});

};

接下来就可以继续操作业务

项目运用到的板块

Vue.js 2+ (Vue-router vuex axios)

Element UI

Node.js

Mongoose

Jsonwebtoken

joi//后端表单验证

blueimp-md5//密码md5加密

运行该项目

clone project

git clone

运行mongod 该项目利用mongod数据库 要运行后端得先启动mongod

cd back

npm install

node index.js 启动后端

cd front

npm install

npm run dev 启动前端项目

LICENSE

MIT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值