簡體   English   中英

使用 Mocha + supertest + Passport 使用 JWT 測試經過身份驗證的路由失敗

[英]Testing authenticated routes with JWT fails using Mocha + supertest + passport

我正在嘗試在 Mocha 中測試經過身份驗證的路由,但在beforebeforeEach鈎子中創建的用戶不會持續存在。

test.js

const should = require('chai').should(),
    mongoose = require('mongoose'),
    request = require('supertest'),
    app = require('../../../../server'),
    agent = request.agent(app),
    AdminUser = require('../../../models/AdminUser');

var credentials = {
    username: 'admin',
    password: 'password'
};

var admin = new AdminUser(credentials);

describe('authenticated routes', function() {
     before(function (done) {
         admin.save(function (err) {
             if (err) done(err);

             agent.post('/api/authenticate')
             .send(credentials)
             .end(function (err, res) {
                 if (err) done(err);
                 jwtToken = res.body.token;
                 done();
             });
         });
     });

    it('should get content with 200', function (done) {
        agent.get('/api/content')
        .set('Authorization', 'JWT ' + jwtToken)
        .expect(200)
        .end((err, res) => {
            if (err) return done(err);
            done();
        });
    });

    after(function (done) {
        AdminUser.remove().exec();
        done();
    })
});

我嘗試使用beforeEach並在afterEach中進行afterEach/api/authenticate的初始帖子成功返回200 ,收到令牌但嘗試使用令牌進行身份驗證時,它得到400 這是由於未找到AdminUser

在護照策略中,我有:

module.exports = function (passport) {
    passport.use(new JwtStrategy(opts, function(jwtPayload, done) {
        AdminUser.findOne({ username: jwtPayload.username }, function (err, user) {
            if (err) { return done(err); }
            if (!user) {
                return done(null, false, { message: 'Bad token.' });
            }
            return done(null, user);
        });
    }));
};

無論我將用戶保存在哪里, AdminUser始終為null 僅當我嵌套回調時才有效,但這會否定beforebeforeEach的使用。

您需要將 Authorization 標頭與Bearer身份驗證方案一起使用:

.set('Authorization', 'Bearer ' + jwtToken)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM