保持用户登陆状态方案

session还是token

之前把session搞了个半懂,sails通过req.session.user = user来储存用户的会话,然后把session存放到redis数据库里这样就能实现验证用户登陆的,如果session过期,用户数据则会消失,访问就会失效,则需要用户再次登陆。
然后今天才发现这样只适合网站这样的短时间存储用户登陆,因为大量用户登陆会存储大量的session使数据库存放不下,所以APP这种需要长时间保存用户登陆的方法不是通过session,而是通过token验证。

JWT

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

在验证用户登陆通过后,jwt通过加密生成一长串token,发送给前端,然后前端储存后每次请求携带这个token与服务器进行校验来判断用户状态

1.服务端登陆成功后,生成一个token发送给前端

var jwt = require('jwt-simple');
var moment = require('moment')

var expires = moment().add(7, 'seconds').valueOf();
var token = jwt.encode({iss: user.id,exp: expires}, '这里填写一个秘钥');

return res.json({result: '登陆成功',user: user,token: token})

2.前端请求发送一个储存的token
3.服务器中间件验证token

module.exports = function(req, res, next) {

    var token = (req.body && req.body.token) || (req.query && req.query.token) || req.headers['x-access-token'];

    console.log(token)

    if(token) {

        var decoded = jwt.decode(token, '之前填写一个秘钥');
        console.log('decoded:' + JSON.stringify(decoded))

               //判断token是否超时
        if(decoded.exp <= Date.now()) {
            console.log('token超时')
            return res.json({
                err: '访问已超时'
            })
        }

        User.findOne({
            id: decoded.iss
        }).exec(function(err, user) {
            if(err) {
                return res.json(err)
            }

            console.log(user)
            req.user = user;
            return next()
        })

    } else {
        return res.json({
            err: '你没有权限访问'
        });
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 微服务架构介绍 1.1 什么是微服务架构? 形像一点来说,微服务架构就像搭积木,每个微服务都是一个零件,并使...
    静修佛缘阅读 6,673评论 0 39
  • 构建用户管理微服务翻译自:https://springuni.com 构建用户管理微服务(一):定义领域模型和 R...
    极乐君阅读 1,573评论 0 10
  • 前言 本文将首先概述基于cookie的身份验证方式和基于token的身份验证方式,在此基础上对两种验证进行比较。最...
    大蟒传奇阅读 38,513评论 16 285
  • 午后,雨过天晴,阴霾在渐渐退去,阳光开始零零散散的洒在万物上!这是个适合游玩的时节,而我却一贯的宅在家里!不是不喜...
    跳舞的毛毛虫阅读 434评论 0 2
  • 由于这几天在看自控力,首先从我的工作开始动起来,今天找了两位教练一起聊工作,让他们说说自己的想法。两位教练在我这里...
    林子Amy阅读 89评论 0 0