This repository has been archived on 2021-07-29. You can view files and clone it, but cannot push or open issues or pull requests.
find_coach/src/store/modules/auth/actions.js

91 lines
2.1 KiB
JavaScript

import getAuth from '../../../scripts/axios-auth';
let timer;
export default {
async login(context, payload) {
return context.dispatch('auth', {
...payload,
mode: 'login'
});
},
async signup(context, payload) {
return context.dispatch('auth', {
...payload,
mode: 'signup'
});
},
async auth(context, payload) {
const mode = payload.mode;
let url = 'accounts:signInWithPassword';
if (mode === 'signup') {
url = 'accounts:signUp';
}
try {
const response = await getAuth.post(url, {
email: payload.email,
password: payload.password,
returnSecureToken: true
});
const responseData = response.data;
const expiresIn = +responseData.expiresIn * 1000;
const expirationDate = new Date().getTime() + expiresIn;
localStorage.setItem('token', responseData.idToken);
localStorage.setItem('userId', responseData.localId);
localStorage.setItem('tokenExpiration', expirationDate);
timer = setTimeout(function() {
context.dispatch('autoLogout');
}, expiresIn);
context.commit('setUser', {
token: responseData.idToken,
userId: responseData.localId
});
} catch (err) {
const error = new Error(err.message);
throw error;
}
},
tryLogin(context) {
const token = localStorage.getItem('token');
const userId = localStorage.getItem('userId');
const tokenExpiration = localStorage.getItem('tokenExpiration');
const expiresIn = +tokenExpiration - new Date().getTime();
if (expiresIn < 0) {
return;
}
setTimeout(function() {
context.dispatch('autoLogout');
}, expiresIn);
if (token && userId) {
context.commit('setUser', {
token: token,
userId: userId
});
}
},
logout(context) {
localStorage.removeItem('token');
localStorage.removeItem('userId');
localStorage.removeItem('tokenExpiration');
clearTimeout(timer);
context.commit('setUser', {
token: null,
userId: null
});
},
autoLogout(context) {
context.dispatch('logout');
context.commit('setAutoLogout');
}
};