私は既に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()関数のユーザを意味します –
Strategyの中でどのようにクエリをチェックすることができないのですか?ハードコーディングされた{id:1}フィルタで実行され、うまくいきます。 JSONオブジェクトを返します。 – peetya