Я использую express.js, паспорт с jwt-стратегией и, конечно, jsonwebtoken для node.js.
Итак, в настоящее время мне удалось реализовать логику на стороне сервера, которая позволяет пользователям входить в систему и возвращать токен jwt.
После этого, когда я получаю запрос с соответствующим токеном в заголовке, он корректно проверяет токен jwt и отображает информацию. Код выглядит следующим образом:
var jwt = require('jsonwebtoken');
function createToken(user) {
return jwt.sign(user, 'shhhhh', {
issuer: "accounts.examplesoft.com"
});
}
var opts = {};
opts.secretOrKey = 'shhhhh';
opts.issuer = "accounts.examplesoft.com";
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
console.log(jwt_payload);
User.findById(jwt_payload.id, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
}
});
}));
app.post('/jwt_login', function(req, res) {
User._loginJwt({
email: req.body.email,
password: req.body.password
}, function(err, user) {
if (err) res.json(err);
else res.json(createToken(user));
});
});
app.get('/jwt_test', passport.authenticate('jwt', {
session: false
}), function(req, res) {
res.json(true);
});
Теперь я пытаюсь сделать клиентскую страницу. Я использую angularjs, и есть много jwt-библиотек для angularjs или, скорее, клиентской стороны в целом. Теперь у меня есть ряд вопросов:
Спасибо за ваши ответы!
См. Здесь претензии, которые могут быть в вашем токене:
http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#rfc.section.4
exp
чтобы убедиться, что токен истекает. Я обычно добавляю свои собственные утверждения, такие какuid
для проверки соответствия токена пользователю, которому я его назначил. Смотрите # 2 о том, почему это не имеет большого значения, если пользователь портит JWT.