Express、Passport 和 JSON Web 令牌 (jwt) 身份验证
Posted
技术标签:
【中文标题】Express、Passport 和 JSON Web 令牌 (jwt) 身份验证【英文标题】:Express, Passport and JSON Web Token (jwt) Authentication 【发布时间】:2018-05-07 07:14:18 【问题描述】:app.get("/secret", passport.authenticate('jwt', session: false ), function(req, res) res.json(message: "成功!没有令牌你看不到这个"); );
我将签入邮递员,但未授权回复 Key:授权值:JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNTExNDMxNjcwfQ.wwt4sY8LDXg_UDqD9-uImdYe0dv-6Ya2IF8WA_Y57Qs
【问题讨论】:
您的 passport.js 文件是什么样的? 请查看我的完整代码以获取以下评论。 【参考方案1】:var _ = require("lodash");
var express = require("express");
var bodyParser = require("body-parser");
var jwt = require('jsonwebtoken');
var 护照 = 要求(“护照”);
var passportJWT = require("passport-jwt");
var ExtractJwt = passportJWT.ExtractJwt;
var JwtStrategy = passportJWT.Strategy;
var jwtOptions =
jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
jwtOptions.secretOrKey = 'tasmanianDevil';
var strategy = new JwtStrategy(jwtOptions, function(jwt_payload, next)
console.log('payload received', jwt_payload);
// usually this would be a database call:
var user = users[_.findIndex(users, id: jwt_payload.id)];
if (user)
next(null, user);
else
next(null, false);
);
passport.use(策略);
var app = express();
app.use(passport.initialize());
app.use(bodyParser.urlencoded( 扩展:真 ));
app.use(bodyParser.json())
app.get("/secret", passport.authenticate('jwt', session: false ),
函数(req, res)
res.json(message: "Success! You can not see this without a token");
);
【讨论】:
您确定您在 jwt_payload 中的 id 进入jwt_payload.id
而不是 jwt_payload._doc.id
吗??以上是关于Express、Passport 和 JSON Web 令牌 (jwt) 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
用户未定义:Nodejs/Express + Passport
Express Sequelize 和 Passport.js 身份验证策略不起作用
没有使用 express 和 passport 设置 Cookie