Где я должен хранить токен JWT? - PullRequest
0 голосов
/ 23 ноября 2018

Я разрабатываю приложение с использованием vue.js и vuex, которое аутентифицируется на сервере JSON API с использованием токенов JWT.Поэтому мне интересно, как лучше хранить токен JWT?

Если я сохраню его в хранилище vuex, он потеряется после обновления страницы, поэтому пользователю необходимо снова войти в систему, что не очень удобно.

И если я сохраню его в локальном хранилище браузера, он устареет до следующего входа в систему, а затем компоненты, которые предполагают, что токен аутентификации запутается.Я понятия не имею, как с этим справиться.

Оцените ваши намеки на это.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Ниже приведен снимок из моего реактивного проекта с библиотекой axios, где у меня была похожая проблема.Когда ответ от сервера был 401 (Не аутентифицирован), я запросил новый токен JWT, используя другой токен (refreshToken) без даты истечения срока действия

axios.interceptors.response.use(
    ok => ok,
    err => {
        if(err.response.status === 401) {
            return axios
                    .get('/api/oauth/token/refresh', {
                        headers: {'Authorization': `Bearer ${localStorage.getItem('refreshToken') }`}
                    })
                    .then(({data}) => {
                        // in data is new access token
                        err.config.headers['Authorization']=`Bearer ${data.token}`;
                        return axios(err.config)
                    });

        } 

        throw err
    }
);
0 голосов
/ 23 ноября 2018

И если я сохраню его в хранилище браузера, он устареет до следующего входа в систему, а затем компоненты, которые предполагают, что токен аутентификации запутается.Я понятия не имею, как с этим справиться.

Это не так, информация localStorage сохраняется для каждого источника документа.Приложение обязано проверить, доступен ли токен (еще не истек), и если нет, перенаправить его на страницу входа.достойный алгоритм для расширения его токена JWT.Например, каждый раз, когда пользователь делает запрос к серверу и у него остается 1 час, вы можете увеличить вход в систему на 1 день.

...