Токен JWT не истекает через определенное время

Почему срок действия моего токена jwt не истекает через 1 час?

Я заметил, что срок его действия не истекает, когда я забыл выйти из своей учетной записи в своей панели администратора, которую я создал в vuejs с помощью vuex.

вот мой API, который я создал в ExpressJS, используя bcrypt и express-jwt для токена.

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)
                })
        })
    }
};

EDIT: добавлен код vuejs для входа в систему.

Спасибо за помощь, ребята!


person Community    schedule 05.11.2019    source источник
comment
Можете ли вы показать нам свой код Vue? Вы на самом деле периодически проверяете токен или только один раз при входе в систему? Срок действия JWT не имеет ничего общего с вашей системой аутентификации, это просто означает, что токен больше не должен считаться действительным, если вы пытаетесь проверить его слишком долго (в данном случае более одного часа) после его создания.   -  person laptou    schedule 05.11.2019


Ответы (1)


Ваш токен JWT — это просто закодированный + подписанный JSON с соответствующими полями, такими как expiresIn, iat.

Хотя он может содержать поле expiresIn, это не означает, что внутренний сервер будет учитывать его.

На внутреннем сервере должна быть написана логика для анализа временной метки, сравнения с текущим временем, чтобы определить, истекло ли оно. Если срок его действия истек, серверная часть должна вернуть код ответа 401 Unauthorized, чтобы сообщить внешнему интерфейсу (вашему клиенту Vue), что токен больше недействителен.

Что вы можете сделать, так это поместить логику проверки срока действия в промежуточное программное обеспечение, чтобы просмотреть поле авторизации заголовков запроса.

person Yee Hui Poh    schedule 05.11.2019