82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
import { defineStore } from 'pinia';
|
|
|
|
const baseUrl = '/api/Users';
|
|
|
|
export const auth = defineStore({
|
|
id: 'auth',
|
|
|
|
state: () => ({
|
|
user: "",
|
|
refreshTokenTimeout: 0
|
|
}),
|
|
|
|
actions: {
|
|
async googleLogin(client, idToken) {
|
|
const response = await client.post("https://people.googleapis.com/v1/people/me", {
|
|
headers: {
|
|
"Authorization": "Bearer " + idToken
|
|
}
|
|
})
|
|
this.user = {
|
|
accessToken: response.data.accessToken,
|
|
refreshToken: response.data.refreshToken,
|
|
email: response.data.email
|
|
}
|
|
localStorage.setItem('jwt', this.user.accessToken);
|
|
this.startRefreshTokenTimer();
|
|
},
|
|
|
|
async login(client, email, password) {
|
|
const requestBody = {
|
|
email: email,
|
|
password: password
|
|
};
|
|
const response = await client.post(`${baseUrl}/login`, requestBody)
|
|
this.user = {
|
|
accessToken: response.data.accessToken,
|
|
refreshToken: response.data.refreshToken,
|
|
email: email
|
|
}
|
|
localStorage.setItem('jwt', this.user.accessToken);
|
|
|
|
this.startRefreshTokenTimer();
|
|
},
|
|
|
|
async loginGoogle(client, accessToken) {
|
|
const response = await client.post(`${baseUrl}/google`, {accessToken: accessToken})
|
|
this.user = {
|
|
accessToken: response.data.accessToken,
|
|
refreshToken: response.data.refreshToken,
|
|
email: response.data.email
|
|
}
|
|
localStorage.setItem('jwt', this.user.accessToken);
|
|
|
|
this.startRefreshTokenTimer();
|
|
},
|
|
|
|
logout() {
|
|
localStorage.setItem('jwt', '');
|
|
this.user = null;
|
|
|
|
this.stopRefreshTokenTimer();
|
|
},
|
|
|
|
async refreshToken(client) {
|
|
const response = await client.post(`${baseUrl}/refresh`);
|
|
this.user.accessToken = response.accessToken;
|
|
localStorage.setItem('jwt', this.user.accessToken);
|
|
|
|
this.startRefreshTokenTimer();
|
|
},
|
|
|
|
startRefreshTokenTimer() {
|
|
const timeout = 50 * 1000;
|
|
this.refreshTokenTimeout = setTimeout(this.refreshToken, timeout);
|
|
},
|
|
|
|
stopRefreshTokenTimer() {
|
|
clearTimeout(this.refreshTokenTimeout);
|
|
}
|
|
}
|
|
});
|