У меня есть приложение VueJS, использующее Vuex & Vue Router.
У меня есть 3 компонента (которые также являются страницами): Домашняя страница, Логин и Защищенная страница, для которой требуется аутентификация.
Страница входа в систему выполняет POST-вызов бэкэнд-API, который возвращает токен, если учетные данные верны.
methods: {
sendCredentials: function() {
const { email, password } = this
this.$store.dispatch(AUTH_REQUEST, {email, password})
.then(() => {
this.$router.push('/')
})
.catch((err) => console.log(err.response));
}
}
Вот соответствующее действие:
actions: {
[AUTH_REQUEST]: ({ commit, dispatch }, user) => {
return new Promise((resolve, reject) => {
commit(AUTH_REQUEST);
axios.post('http://localhost:3000/api/login', user)
.then((resp) => {
const token = resp.data.token;
localStorage.setItem('userToken', token);
commit(AUTH_LOGIN, token);
resolve(resp);
})
.catch(err => {
commit(AUTH_ERROR, err);
localStorage.removeItem('userToken');
reject(err);
})
});
}
Я использовал навигационную охрану, чтобы заблокировать доступ к защищенной странице, если пользователь не вошел в систему.
Это на самом деле работает: когда я захожу на защищенную страницу, меня просят войти в систему. Когда я использую учетные данные прав, я могу получить доступ к защищенной странице.
У меня еще есть огромная ошибка: когда я помещаю любую произвольную строку в localStorage в качестве userToken, я могу получить доступ к защищенной странице ...
Как это предотвратить?
Исходное состояние определяется следующим образом:
state: {
token: localStorage.getItem('userToken') || '',
},
Есть ли способ проверки userToken, который я получаю через localStorage, когда я устанавливаю начальное состояние токена?