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) 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

基于Express实现Passport用户名和密码登陆认证

用户未定义:Nodejs/Express + Passport

Express Sequelize 和 Passport.js 身份验证策略不起作用

没有使用 express 和 passport 设置 Cookie

无法使用 Passport.js 和 Express 4 访问 req.user

如何使用分离的后端和前端(Passport / Express / React)进行社交身份验证