91 lines
2.1 KiB
JavaScript
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');
|
|
}
|
|
};
|