【发布时间】:2020-03-01 08:00:01
【问题描述】:
为什么我的 jwt 令牌在 1 小时后没有过期?
我注意到,当我忘记在我使用 vuex 在 vuejs 中创建的管理面板中注销我的帐户时,它不会过期。
这是我在 ExpressJS 中使用 bcrypt 和 express-jwt 作为令牌创建的 API。
router.post('/login', (req, res) => {
let sql = "SELECT * FROM AUTHENTICATION WHERE email = ?";
myDB.query(sql, [req.body.email, req.body.password], function (err, results) {
if (err) {
console.log(err);
} else {
if (!results) {
res.status(404).send('No user found.')
} else {
try {
let passwordMatched = bcrypt.compareSync(req.body.password, results[0].password);
if (passwordMatched) {
// Passwords match
let token = jwt.sign({ id: results.id }, config.secret, {
expiresIn: '1h'
});
res.status(200).send({ auth: true, token: token, user: results });
} else {
//Password doesn't match
return res.status(401).send({ auth: false, token: null });
}
} catch (error) {
res.send({ Success: false })
}
}
}
})
});
这是我在 vuex 中的登录信息,我从后端收到了令牌。
import axios from 'axios';
const state = {
status: '',
token: localStorage.getItem('token') || '',
user: {}
};
const getters = {
isLoggedIn: state => !!state.token,
authStatus: state => state.status,
};
const mutations = {
auth_request(state) {
state.status = 'loading'
},
auth_success(state, token, user) {
state.status = 'success'
state.token = token
state.user = user
},
auth_error(state) {
state.status = 'error'
},
logout(state) {
state.status = ''
state.token = ''
},
};
const actions = {
login({ commit }, user) {
return new Promise((resolve, reject) => {
commit('auth_request')
axios({ url: 'http://localhost:9001/login/login', data: user, method: 'POST' })
.then(resp => {
const token = resp.data.token
const user = resp.data.user
localStorage.setItem('token', token)
// Add the following line:
axios.defaults.headers.common['Authorization'] = token
commit('auth_success', token, user)
resolve(resp)
})
.catch(err => {
commit('auth_error')
localStorage.removeItem('token')
reject(err)
})
})
}
};
编辑:为登录添加了 vuejs 代码
感谢大家的帮助!
【问题讨论】:
-
你能告诉我们你的 Vue 代码吗?您实际上是在定期验证令牌,还是在登录时只验证一次? JWT 过期与您的身份验证系统没有任何关系,它只是意味着如果您在创建令牌后尝试验证它的时间过长(在这种情况下超过一小时),则不应再将其视为有效。跨度>
标签: express jwt-auth express-jwt