我已經在Stackoverflow上檢查了多個答案,並且還通過了文檔,但我仍然無法找出可能是什麼問題。在我的應用程序中,我使用SequelizeJS訪問我的mySQL數據庫,現在我試圖使用JWT策略來使用PassportJS保護我的REST API端點。當使用PassportJS,SequelizeJS和JWT令牌時,req.user是未定義的
./app.js
// ...
// passport
app.use(passport.initialize());
require('./config/passport')(passport);
// ...
./config/passport.js
var passport = require('passport');
var passportJwt = require('passport-jwt');
var models = require('../models');
var config = require('./config');
var ExtractJwt = passportJwt.ExtractJwt;
var Strategy = passportJwt.Strategy;
module.exports = function(passport) {
var params = {
secretOrKey: config.jwt.secret,
jwtFromRequest: ExtractJwt.fromAuthHeader()
};
passport.use(new Strategy(params, function(jwt_payload, done) {
models.User.findOne({
where: {
id: jwt_payload.id
}
}).then(
function(user) {
if (user) {
done(null, user);
} else {
done(null, false);
}
},
function(err) {
return done(err, false);
}
);
}));
};
我想從這個簡單的路線的要求,得到了用戶的實體:
var router = express.Router();
// ...
router.route('/user/me', passport.authenticate('jwt', { session: false }))
.get(function(req, res) {
console.log(req.user);
res.json(req.user);
});
我已經創建了另一條路線,它根據提供的用戶名和密碼返回一個JWT令牌。當我打電話/user/me
端點我附上JWT令牌到頁眉,例如:
Authorization: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.M9z3iWNdjAu4THyCYp3Oi3GOWfRJNCYNUcXOw1Gd1Mo
所以,我的問題是,當我致電/user/me
端點一個道理,req.user
將是不確定的,我不明白它是什麼原因。
非常感謝您的幫助!
不便只是爲了確保,你檢查你的模型的搜索查詢的回報是什麼?我的意思是用戶在.then()函數 –
我不知道如何檢查策略中的查詢,但我用硬編碼{id:1}過濾器執行,它工作正常。它返回一個JSON對象。 – peetya