Skip to content

zwStar/token-login

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

token-login

一个基于vue+node+mongodb实现的Jsonwebtoken简单登录功能
该项目只有简单的实现登录功能,可以在此基础上继续开发新的业务

什么是 JWT?

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

为什么不用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的状态信息<br>
    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

About

一个基于token的验证登录

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published