Wishlist/resources/store/user.js

89 lines
2.6 KiB
JavaScript

import { defineStore } from 'pinia'
import axios from "axios";
export const useUserStore = defineStore('user', {
state: () => ({
user: null,
token: localStorage.getItem('auth_token') || null,
}),
// could also be defined as
// state: () => ({ count: 0 })
actions: {
setUser(user) {
this.user = user;
},
setToken(token) {
this.token = token;
localStorage.setItem('auth_token', token);
},
checkUser(){
axios.get(
'/api/auth/user',
{
headers:
{
Authorization: `Bearer ${this.token}`,
token: this.token
}
}
).then((res) => {
this.setUser(res.data);
}).catch((error)=>{
this.nullifyUser();
})
},
async login(email, password, rememberMe){
await axios.post(
'/api/auth/login',
{
'email': email,
'password': password,
'remember_me': rememberMe
}).then((res) => {
this.setUser(res.data.user);
this.setToken(res.data.accessToken);
return true;
}).catch((error)=>{
if (!error.response){
return false;
}
return error.response.data.message;
})
},
async registration(login, email, password, repeatPassword){
await axios.post(
'/api/auth/register',
{'name': login,
'email': email,
'password': password,
'c_password': repeatPassword
}).then((res) => {
this.setUser(res.data.user);
this.setToken(res.data.accessToken);
return true;
}).catch((error)=>{
if (!error.response){
return false;
}
return error.response.data.message;
})
},
logout(){
axios.get('/api/auth/logout',
{
headers:
{
Authorization: `Bearer ${this.token}`,
token: this.token
}
}
);
this.nullifyUser();
},
nullifyUser(){
this.setUser(null);
this.setToken(null);
}
},
})