javascript - express-jwt 身份验证中间件不工作

标签 javascript node.js authentication express mean-stack

我使用 express-jwt 进行身份验证,以下是我的代码:

api>routes/index.js:

var express = require('express');
var router  = express.Router();

var jwt = require('express-jwt');
var auth = jwt({ secret: 'thisIsSecret', requestProperty: 'auth' });

当我在

中使用 auth 中间件时,在 index.js
router.post('/locations/:locationId/reviews', auth, ctrlReviews.reviewsCreate);

路由,当想用 postman 发布评论数据时,请求进入加载状态,并且没有响应出现,但如果从路由请求中删除 auth 则会给出响应。 我也检查过

var auth = jwt({
  secret: process.env.JWT_SECRET,
  userProperty: 'payload'
});

最佳答案

正如评论中提到的,您正在尝试处理有效和无效的 token 。这应该可以通过类似于下面的代码的方式实现。

如果您使用 Postman 使用以下 header 调用此函数,那么您将收到 200 OK,并显示一条消息“OK!”。

Authorization: Bearer validJWT

如果您使用 Postman 在没有有效 JWT 的情况下调用此方法,那么您将收到 401 Unauthorized 消息,并显示“无效 token ...”消息。

var jsonwebtoken = require('jsonwebtoken');
var express = require('express');
var app  = express();

var jwt = require('express-jwt');
var auth = jwt({ secret: 'thisIsSecret', requestProperty: 'auth'});

// Generate valid JWT
console.log(jsonwebtoken.sign({ foo: 'bar' }, 'thisIsSecret'));

app.post('/locations/:locationId/reviews', auth, function(req, res, next) {
    // Log user details set in JWT
    console.log(req.auth)
    res.send('OK!');
});

// Handle invalid JWT
app.use(function(err, req, res, next) {
    if (err.constructor.name === 'UnauthorizedError') {
        res.status(401).send('invalid token...');
    }
});

app.listen(3000, function() {
    console.log('Server running on 3000')
})

关于javascript - express-jwt 身份验证中间件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41977650/

相关文章:

node.js - 如何在 typescript 中强制变量的类型?

javascript - 在 Markdown 服务器或客户端中格式化? Node js

node.js - Flatmap-stream 存在恶意提交,因此被删除。现在我无法运行我的网站,因为它是一个依赖项。关于我应该做什么有什么建议吗?

amazon-web-services - 将图像从 EC2 容器注册表部署到 Elastic Beanstalk 凭据?

authentication - 限制 Azure 身份提供商

java - 在 Java 中使用 SAML2 进行 SSO 身份验证以及如何使用 HtmlUnit 执行 JavaScript

javascript - JavaScript 中的 window.location.href 和 window.open() 方法

javascript - Aurelia 未脏检查功能导致 HTML 类属性绑定(bind)

javascript - 当组件在多个选择中呈现时,如何取消选择第一个选项?

javascript - 我如何结合谷歌地图和基于主干 View 的信息框