node.js에서 jwt 및 passport를 사용하여 성공적으로 인증하려고합니다. JwtStrategy에 passport.use를 사용하고 있습니다.node.js 여권 및 ExtraxtJwt 작동을 얻으려고
나는 http://localhost:3000/users/profile에 우체부와 POST 요청을 보낼 때
// Profile
router.get('/profile', passport.authenticate('jwt', { session: false }), (req, res, next) => {
res.json({ user: req.user });
});
내가 지금까지 너무 좋아 Unauthorized
을 얻을, 그것은 토큰없이 저를 unauthorize 것을 테스트하기 위해 내 경로 중 하나에서 인증 켜져 설정 ...
올바른 사용자 이름과 암호로 localhost : 3000/users/authenticate에서 우편 발송자를 통해 로그인 할 때 토큰을 다시받습니다. 다음과 같습니다 : 나는 정확히 같은 그 토큰을 잡기 위해 노력했다
{
"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 요청을 할 때?