猿问

护照-jwt总是返回未经授权的401

我正在尝试使用passport-jwt身份验证策略对nodejs api进行身份验证,但是它始终会引发401未经授权的错误。我尝试了各种实现,但是passport.authenticate函数似乎不起作用。


使用以下护照版本:

“ passport”:“ ^ 0.4.0”,

“ passport-jwt”:“ ^ 4.0.0”,


请在下面查看我的代码:


尝试了以下选项:


jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()  

jwtFromRequest: ExtractJwt.fromHeader('authorization')  

jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('Bearer')  

jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('jwt')  

但是没有用。


尝试查看“ passport-jwt 401未经授权”以及其他链接以供参考。


app.js文件:


const express = require('express');

const bodyParser = require('body-parser');

const passport = require('passport');

const cors = require('cors');


const app = express();

const login = require('./routes/login');


app.use(cors());

app.use(bodyParser.urlencoded({ extended: false }));

app.use(bodyParser.json());

// app.use(passport.initialize());


app.use('/', login);


app.listen(8000, () => console.log('Server running on http://localhost:8000/'));

路由文件夹中的login.js文件:


const express = require('express');

const router = express.Router();

const passport = require('passport');

const passportref = require('./../controllers/passport');

const loginController = require('./../controllers/loginController');


router.post('/putemailregistration',loginController.putEmailregistration);

router.get('/login', passportref.authenticate,loginController.verifyLogin);


module.exports = router;

Passport.js文件:


const passport = require('passport');

const JWTStrategy = require("passport-jwt").Strategy;

const  ExtractJwt = require('passport-jwt').ExtractJwt;

const models = require('./../models');


const opts = {

  jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),

  secretOrKey: 'incredible',

}


慕娘9325324
浏览 416回答 4
4回答

阿晨1998

为了解决这个问题,您可以在中间件中进行管理function authorized(request, response, next) {    passport.authenticate('jwt', { session: false, }, async (error, token) => {        if (error || !token) {            response.status(401).json({ message: 'Unauthorized Message' });        }         try {            console.log('token',token)            const user = await User.findOne(                {_id: token._id}            );            request.user = user;        } catch (error) {            next(error);        }        next();    })(request, response, next);   }router.get(  '/',  authorized,  trimRequest.all,  user.getItems)

一只斗牛犬

就我而言,我正在使用expiresIn环境变量中的值。环境变量的值将是String类型,如果我们将字符串值传递给expiresIn,它将以毫秒为单位。因此,值3600被转换为3秒,到我将令牌从登录响应复制到auth标头时,该令牌已过期。

BIG阳

用 passport.use('jwt',new JWTStrategy({opts},verify_callback(){})在passport.js
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答