私はPassportを認証、特にJWT戦略に使用しています。私はユーザーが作成されたときに新しいトークンを作成することができますが、認証が必要なルートへのリクエストのヘッダーにそのトークンを使用すると、リクエストがハングアップします。これらのPOST/GETリクエストをテストするためにPostmanを使用しています。Passport.authenticateは応答を送信しません
は、ここでユーザーをサインアップするための私の初期設定です:
const User = require('../db/models/User');
const jwt = require('jsonwebtoken');
function userToken(user) {
return jwt.sign({
id: user.id,
}, process.env.JWT_SECRET);
}
exports.signup = function(req, res, next) {
const email = req.body.email.toLowerCase();
const password = req.body.password.toLowerCase();
User.findOne({
where: { email },
}).then(function(user) {
if (!user) {
User.create({
email,
password,
})
.then(function(user) {
return res.send({ token: userToken(user) });
});
}
if (user) {
return res.send({ message: 'That user is in use' });
}
});
};
ここに私のパスポートの設定があります:
const passport = require('passport');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../db/models/User');
const jwtOptions = {
jwtFromRequest: ExtractJwt.fromHeader('authorization'),
secretOrKey: process.env.JWT_SECRET,
};
const jwtLogin = new JwtStrategy(jwtOptions, function(payload, done) {
User.findOne({
where: { id: payload.id },
}, function(err, user) {
if (err) { return done(err, false); }
if (user) { return done(null, user); }
return done(null, false);
});
});
passport.use(jwtLogin);
は、ここに私の保護されたルートは次のようになります。
const passport = require('passport');
const requireAuth = passport.authenticate('jwt', { session: false });
module.exports = function router(app) {
app.get('/', requireAuth, function(req, res) {
res.send({ 'hi': 'there' });
});
};
は、ここで私は私の端末で見るものです:
Executing (default): SELECT "id", "username", "email", "password", "photo", "createdAt", "updatedAt" FROM "users" AS "user" WHERE "user"."id" = 15;
だから私はそれが正しくユーザーIDの照会し、それを探していますことを知っている、しかし、それだけではなく、サービス提供よりも、この時点でハングアップ私は応答します。
問題が何であるかわからないので、すべての提案を歓迎し、感謝します。ありがとうございました!
...
const jwtLogin = new JwtStrategy(jwtOptions, function(payload, done) {
User.findOne({
where: { id: payload.id }
})
.then(user => {
if (user) {
done(null, user);
} else {
done(null, false);
}
})
.catch(err => {
if (err) { return done(err, false); }
});
});
...
これは私の問題を解決し、私の応答を返している: