token在nodeJs中使用

@跃焱邵隼

<!--
和java一样,token的生成/存储有多种方式,下面我们重点讲一种方式:
即使用:jwt ; 下载依赖npm install jsonwebtoken --save
(ps:因为前后端分离常常会涉及到跨域,前面我已经讲过了。引入cors等操作)。

为了方便起见 我将jwt的使用方式单独封装成js文件
// 引入模块依赖
var jwt = require('jsonwebtoken');
var secretOrPrivateKey="jwtSecret",//密钥,一般很复杂,可以存服务器本地;然后获取;
    duringTime={expiresIn:60*30};// 1小时过期;
var  Jwt={
    setJwt:function (content) {
        var token=jwt.sign(content, secretOrPrivateKey,duringTime);
        return token
    },
    getJwt:function (token,callback) {
        jwt.verify(token,secretOrPrivateKey, function(err, decode){
            callback(err,decode);
        });
    }
};
module.exports = Jwt;

接下来使用:
//一:获取并鉴权。我习惯在app.js中进行token鉴权
app.use(function (request,response,next) {
    if(request.url=='/routers/load/doLogin'||request.url=='/routers/load/doRegist'){//可以更多。不列举
      next();
    }else{
      var token=request.body.token;
      if(token&&token!=''){
        //验证token
          Jwt.getJwt(token,function (err,decode) {
              if (err) {
                //时间失效的时候 || 伪造的token
                  response.send({'msgCode':-1});
              } else {
                //获取通行权限
                  next();
              }
          })
      }else{
        //token不存在
        response.send({"msgCode":-1});
      }
    }
});

//二:生成并传递
我个人喜欢和java后端一样,将路由和逻辑处理分开,新建一个service文件夹;这样能让路由看的干净,业务处理都在service层
controller层--routers路由
var express=require("express");
var routers=express.Router();
var userService=require("../../services/userService");
routers.post("/doLogin",function (request,response) {
    var data={
        username:request.body.username,
        password:request.body.password
    };
    userService.findUser(data,function (res) {
        response.send(res)
    });
});
routers.post("/doRegist",function (request,response) {
    var data={
        username:request.body.username,
        password:request.body.password
    };
    userService.addUser(data,function (res) {
        response.send(res)
    });
});
module.exports=routers;

service层--会在这里生成token。
var dbName='dbUser';
var collectionName='user';
var connect=require("../myUtils/dbUtils/connet");
var sortData={};
var Jwt=require("../myUtils/jwtUtils/jwt");

var userService={
    findUser:function (data,callback) {
        connect.find(dbName,collectionName,data,sortData,function (res) {
            if(res.length>0){
                var token=Jwt.setJwt({username:data.username});
                callback({
                    msgCode:0,
                    message:'登陆成功!',
                    token:token
                });
            }else{
               callback({
                    msgCode:-1,
                    message:'登陆失败!用户名或密码错误'
                });
            }
        })
    },
    addUser:function (data,callback) {
        connect.find(dbName,collectionName,data,sortData,function (res) {
            if(res.length>0){
                callback({
                    msgCode:-1,
                    message:"注册失败!用户名已经注册"
                })
            }else{
                var token=Jwt.setJwt({username:data.username});
                connect.add(dbName,collectionName,data,function (res) {
                    if(res.result.n>=1){
                        callback({
                            msgCode:0,
                            message:"注册成功!",
                            token:token
                        });
                    }else{
                        callback({
                            msgCode:-1,
                            message:"异常错误,注册失败!"
                        });
                    }
                })
            }
        })
    }
};
module.exports=userService;

最后前端需要做的是,在登录和注册页面接受传过来的token,存至本地(localStorage等),然后再其他页面获取并向服务器请求数据时携带即可

 -->

可参见:跃焱邵隼

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跃焱邵隼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值