token,passport,jsontoken,详解使用

 

1.首先安装:

npm install jsonwebtoken

npm install passport-jwt passport

(jsonwebtoken获取token,passport-jwt和passport验证token)

 

2.在server.js中,首先引入passport:

const passport = require('passport');
app.use(passport.initialize());

如果你想要在其他模块中使用passport,那么还要引入:

require("./config/passport")(passport);

./config/passport是项目下的一个模块,passport是文件中导出的passport

 

 

3.得到token:

//得到token
router.post("/login",(req,res) =>{
    const email = req.body.email;
    const password = req.body.password;
    const rule = {id:user.id,name:user.name};
    //rule表示传给passport的值
    //secret是key
    //{expiresIn:100000}表示过期时间单位是秒
    jwt.sign(rule,"secret",{expiresIn:100000},(err,token) => {
        if(err){
            throw err;
            }
            res.json({
                success:true,
                //拿到了token
                token:"Bearer " + token
            });
        });
});

 

4.验证token

执行到passport.authenticate("jwt",{session:false})的时候,代码会找到passport。也就是执行我们步骤五中的代码。

//验证token
router.get("/current",passport.authenticate("jwt",{session:false}),(req,res) => {
    // 如果passport是done(null,user) 即返回回来的是查询的用户信息。则res.send,否则箭头函数不执行
    res.json({success:true});
})

 

5.最后补上./config/passport.js中的代码配置:

jwt_payload的值就是发送token的时候,所编写的rule。

譬如我们这里的rule是步骤三中的:

const rule = {id:user.id,name:user.name};

那么kwt_payload也就是一个json数据,里面是user.id和user.name

如果验证成功会返回一个done(null,user),也就是返回找到的user信息,失败则返回false,是否成功的信息传递给验证token的页面也就是步骤4。

const JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
const mongoose = require("mongoose");
const User = mongoose.model("users");
const keys = require("../config/keys");

const opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = keys.secretOrKey;

module.exports = passport => {
    passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
        User.findById(jwt_payload.id)
            .then(user => {
                if(user){
                    return done(null,user);
                }
                return done(null,false);
            }).catch(err => {
                console.log(err);
        });

    }));
};

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值