103 lines
3.1 KiB
TypeScript
103 lines
3.1 KiB
TypeScript
import AuthService from '@/services/AuthService'
|
|
import User from "@/types/User";
|
|
|
|
import {ActionContext, Module} from 'vuex';
|
|
import {RootState} from './index';
|
|
import TokenService from "@/services/TokenService";
|
|
import UserService from "@/services/UserService";
|
|
import PlayerService from "@/services/PlayerService";
|
|
import UserInfo from '@/types/UserInfo';
|
|
import Player from '@/types/Player';
|
|
|
|
export interface AuthState {
|
|
isAuthenticated: boolean;
|
|
user: User | null;
|
|
}
|
|
|
|
const user = JSON.parse(localStorage.getItem('auth') || '""');
|
|
|
|
const initialState = user
|
|
? {isAuthenticated: true, user}
|
|
: {isAuthenticated: false, user: null};
|
|
|
|
|
|
type AuthActionContext = ActionContext<AuthState, RootState>;
|
|
|
|
const auth: Module<AuthState, RootState> = {
|
|
namespaced: true,
|
|
state: initialState,
|
|
actions: {
|
|
login({commit}: AuthActionContext, user) {
|
|
return AuthService
|
|
.login(user.email, user.password)
|
|
.then(auth => {
|
|
return UserService
|
|
.fetchById(auth.id)
|
|
.then((user: User) => {
|
|
commit('loginSuccess', user);
|
|
return Promise.resolve(user);
|
|
}, error => {
|
|
commit('loginFailure');
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
}, error => {
|
|
commit('loginFailure');
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
},
|
|
logout({commit}: AuthActionContext) {
|
|
return AuthService.logout().then(() => {
|
|
commit('logout');
|
|
return Promise.resolve();
|
|
})
|
|
},
|
|
register({commit}: AuthActionContext, user) {
|
|
return AuthService.register(user.email, user.password).then(
|
|
response => {
|
|
commit('registerSuccess');
|
|
return Promise.resolve(response.data);
|
|
},
|
|
error => {
|
|
commit('registerFailure');
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
},
|
|
refreshToken({commit}: AuthActionContext, accessToken) {
|
|
commit('refreshToken', accessToken);
|
|
}
|
|
},
|
|
mutations: {
|
|
loginSuccess(state, user) {
|
|
state.isAuthenticated = true;
|
|
state.user = user;
|
|
},
|
|
loginFailure(state) {
|
|
state.isAuthenticated = false;
|
|
state.user = null;
|
|
},
|
|
logout(state) {
|
|
state.isAuthenticated = false;
|
|
state.user = null;
|
|
TokenService.removeUser();
|
|
},
|
|
registerSuccess(state) {
|
|
state.isAuthenticated = false;
|
|
},
|
|
registerFailure(state) {
|
|
state.isAuthenticated = false;
|
|
},
|
|
refreshToken(state, accessToken: string) {
|
|
state.isAuthenticated = true;
|
|
TokenService.updateLocalAccessToken(accessToken);
|
|
}
|
|
},
|
|
getters: {
|
|
getUser: (state) => state.user
|
|
}
|
|
};
|
|
|
|
export default auth;
|