node.jsでjwtとパスポートを使用して正常に認証しようとしています。 私はJwtStrategyでpassport.useを使用しています。node.jsパスポートとExtraxtJwtを取得しようとしています
私は http://localhost:3000/users/profileに郵便配達を持つPOSTリクエストを送信すると、私はこれまでのところ良いUnauthorized
を得る
// Profile
router.get('/profile', passport.authenticate('jwt', { session: false }), (req, res, next) => {
res.json({ user: req.user });
});
、それはトークンなしで私を無許可にすることをテストするために私のルートの1つで認証をオンに設定している
...
正しいユーザー名とパスワードでlocalhost:3000/users/authenticateにpostmanを使用してログインすると、トークンが返されます。次のようになります。
{
"success":true,
"token":"JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7Il9pZCI6IjVhMzNiMzE1NDFlYWU1MDk2MDRhNTE0ZiIsIm5hbWUiOiJyYXMiLCJlbWFpbCI6InJhc0BwLmQiLCJ1c2VybmFtZSI6InJwdWxzIiwicGFzc3dvcmQiOiIkMmEkMTAkTFR5eS50TmdualB2a0htWXNuUkV0TzRwWEVEL0gycDJCYWRDRlVXMUtWaXI5TnltSUtnVUciLCJfX3YiOjB9LCJpYXQiOjE1MTMzNDI1MjksImV4cCI6MTUxMzk0NzMyOX0.amCkcFWtPwf_HYUxpXOPvcRShksH9fw7O4vVOsBm4yA",
"user":{
"id":"5a33b31541eae509604a514f",
"name":"n",
"username":"testUser",
"email":"[email protected]"}
}
私は、まさにこのように、そのトークンをつかむしようとしている:それは本当に.....
JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7Il9pZCI6IjVhMzNiMzE1NDFlYWU1MDk2MDRhNTE0ZiIsIm5hbWUiOiJyYXMiLCJlbWFpbCI6InJhc0BwLmQiLCJ1c2VybmFtZSI6InJwdWxzIiwicGFzc3dvcmQiOiIkMmEkMTAkTFR5eS50TmdualB2a0htWXNuUkV0TzRwWEVEL0gycDJCYWRDRlVXMUtWaXI5TnltSUtnVUciLCJfX3YiOjB9LCJpYXQiOjE1MTMzNDI1MjksImV4cCI6MTUxMzk0NzMyOX0.amCkcFWtPwf_HYUxpXOPvcRShksH9fw7O4vVOsBm4yA
とAuthorization
ヘッダとして追加し、私はまだUnauthorized
を取得私は絶対にエラーメッセージを受け取っていないので、進めるのが難しいです。この行が問題
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/user');
const config = require('../config/database');
module.exports = function (passport) {
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
User.getUserById(jwt_payload._id, (err, user) => {
if (err) {
return done(err, false);
console.log(err);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
});
}));
}
次のとおりです。ここで
は私のパスポートのコードですか?
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
私はExtractJwt.fromAuthHeaderWithScheme( "jwt")の代わりに同じ結果を試しました。 (私は正しいユーザ/パスとログイン時に戻ってトークンを取得するので、私は中華鍋を推測)ここで は私の認証コードある
// Authenticate
router.post('/authenticate', (req, res, next) => {
const username = req.body.username;
const password = req.body.password;
User.getUserByUsername(username, (err, user) => {
if (err) throw err;
if (!user) {
return res.json({ success: false, msg: 'User not found' });
}
User.comparePassword(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
const token = jwt.sign({data: user}, config.secret, {
expiresIn: 604800 // 1 week
});
res.json({
success: true,
token: 'JWT ' + token,
user: {
id: user._id,
name: user.name,
username: user.username,
email: user.email
}
});
} else {
return res.json({ success: false, msg: 'Wrong password' });
}
});
});
});
も私はポストマンで何かを間違ってやっているということだろうGETリクエストを行うときは?