Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import axios from 'axios';
- import router from '../router';
- import notificator from '../services/notificator';
- const generateEmptyUser = () => ({
- id: '',
- name: '',
- email: '',
- });
- export default {
- namespaced: true,
- state: {
- user: generateEmptyUser(),
- tokenRenewalIntervalHandle: null,
- },
- getters: {
- getUser: (state) => state.user,
- isAuthenticated: (state) => !!state.user.id,
- },
- mutations: {
- setUser: (state, userData) => state.user = userData,
- },
- actions: {
- updateProfile: async ({dispatch}, profileData) => {
- try {
- const {data} = await axios.put('/user/profile', profileData);
- await dispatch('setToken', data.token);
- await dispatch('fetchUser');
- router.push({name: 'home'});
- notificator.success('Your profile has been updated!');
- } catch (e) {
- console.log({...e});
- notificator.error('Could not update your profile.');
- }
- },
- getPasswordResetToken: async (ctx, email) => {
- try {
- await axios.post('/user/forgot-password', {email});
- router.push({name: 'userLogin'});
- notificator.success('Your password reset link has been sent to your email!');
- } catch (e) {
- console.log({...e});
- notificator.error('Could not reset your password.');
- }
- },
- resetPassword: async (ctx, payload) => {
- try {
- await axios.put(
- '/user/reset-password',
- {newPassword: payload.newPassword},
- {headers: {Authorization: 'Bearer ' + payload.token}}
- );
- router.push({name: 'userLogin'});
- notificator.success('Your password has been reset successfully!');
- } catch (e) {
- console.log({...e});
- notificator.error('Could not reset your password.');
- }
- },
- logOut: ({dispatch}) => {
- dispatch('unsetToken');
- router.push({name: 'userLogin'});
- },
- changePassword: async ({dispatch, state}, changePasswordData) => {
- try {
- await axios.put('/user/change-password', changePasswordData);
- router.push({name: 'home'});
- notificator.success('Your password has been successfully changed!');
- } catch (e) {
- console.log({...e});
- notificator.error('Could not change your password.');
- }
- },
- register: async ({dispatch, state}, registerData) => {
- try {
- const {data} = await axios.post('/user/register', registerData);
- dispatch('setToken', data.token);
- await dispatch('fetchUser');
- } catch (e) {
- console.log({...e});
- notificator.error('There was an error when registering your account.');
- }
- },
- logIn: async ({dispatch, state}, loginData) => {
- try {
- const {data} = await axios.post('/user/login', loginData);
- dispatch('setToken', data.token);
- await dispatch('fetchUser');
- } catch (e) {
- console.log({...e});
- notificator.error('Specified credentials are invalid.');
- }
- },
- tryAutoLogin: async ({dispatch, getters}) => {
- const token = localStorage.getItem('token');
- if (token && !getters.isAuthenticated) {
- // token needs to be set
- // for renewToken to work
- dispatch('setToken', token);
- await dispatch('renewToken');
- await dispatch('fetchUser');
- }
- },
- renewToken: async ({dispatch}) => {
- try {
- const {data} = await axios.get('/user/renew-token');
- await dispatch('setToken', data.token);
- } catch (e) {
- console.log({...e});
- dispatch('unsetToken');
- router.push({name: 'userLogin'});
- }
- },
- fetchUser: async ({commit}) => {
- try {
- const {data} = await axios.get('/user/authenticate');
- commit('setUser', data.user);
- } catch (e) {
- console.log({...e});
- router.push({name: 'userLogin'});
- }
- },
- setToken: ({state, dispatch}, token) => {
- localStorage.setItem('token', token);
- axios.defaults.headers.common['authorization'] = `Bearer ${token}`;
- if (state.tokenRenewalIntervalHandle) return;
- state.tokenRenewalIntervalHandle = setInterval(() => dispatch('renewToken'), 1000 * 60 * 10);
- },
- unsetToken: ({state, commit}) => {
- commit('setUser', generateEmptyUser());
- localStorage.removeItem('token');
- delete axios.defaults.headers.common['authorization'];
- clearInterval(state.tokenRenewalIntervalHandle);
- state.tokenRenewalIntervalHandle = null;
- },
- },
- };
Add Comment
Please, Sign In to add comment