#node.js #angular #express #jwt
#node.js #angular #экспресс #jwt
Вопрос:
У меня проблема, все мои JWT работают без токена, но при перезагрузке я теряю всю аутентификацию.
Итак, я пытаюсь получить постоянный токен. с использованием локального хранилища. но это не сработало.
Я пытаюсь проверить, подходит ли длительность токена для постоянной авторизации. Я думаю, что мой код правильный, но не знаю, где ошибка. Я думаю, что это в службе аутентификации. Но я не знаю почему.
Код входа в систему NodeJS
exports.login = (req, res, next) => {
Userbo.findOne({ email: req.body.email }).then(
(userbo) => {
if (!userbo) {
return res.status(401).json({
error: new Error('User not found!')
});
}
bcrypt.compare(req.body.password, userbo.password).then(
(valid) => {
if (!valid) {
return res.status(401).json({
error: new Error('Incorrect password!')
});
}
const token = jwt.sign(
{ userId: userbo._id },
'RANDOM_TOKEN_SECRET',
{ expiresIn: 7200 });
res.status(200).json({
userId: userbo._id,
token: token,
role : userbo.role,
expiresIn: 7200,
});
}
).catch(
(error) => {
res.status(500).json({
error: error
});
}
);
}
).catch(
(error) => {
res.status(500).json({
error: error
});
}
);
}
Angular auth.service
login(email: string, password: string) {
return new Promise((resolve, reject) => {
this.http.post(
'http://localhost:3000/api/authbo/login',
{ email: email, password: password })
.subscribe(
(authData: { token: string, userId: string, role: string, expiresIn: Number }) => {
this.token = authData.token;
this.userId = authData.userId;
localStorage.setItem('id_token', authData.token);
const expiresAt = moment().add(authData.expiresIn.valueOf(), 'second');
localStorage.setItem("expires_at", JSON.stringify(expiresAt.valueOf()));
this.role = authData.role;
this.isAuth$.next(true);
console.log('LOGIN' this.isAuth$);
resolve();
},
(error) => {
reject(error);
}
);
});
}
logout() {
this.isAuth$.next(false);
this.userId = null;
this.token = null;
this.role = null;
localStorage.removeItem("id_token");
localStorage.removeItem("expires_at");
}
public isLoggedIn() {
return moment().isBefore(this.getExpiration());
}
getExpiration() {
const expiration = localStorage.getItem("expires_at");
const expiresAt = JSON.parse(expiration);
return moment(expiresAt);
}
Я не знаю, правильно ли создан токен? кто-нибудь может мне помочь? 🙂
Комментарии:
1. Перейдите к jwt.io и вставьте сюда свой токен и проверьте свойство expiration, если вы не уверены в продолжительности своего срока действия. Срок действия вашего токена истекает через 7200 мс.
2. он говорит, что это хорошо jwt.io /…
3. Для меня это не имеет никакого смысла. Срок действия вашего токена должен истечь через 7200 мс в соответствии с вашим кодом.
4. Да, но проблема в том, что я попытался прочитать токен для проверки подлинности. Это не работает