Перенес все axios-запросы в store

This commit is contained in:
Dhaverd 2024-10-27 03:55:29 +08:00
parent 915f84022a
commit 95dfe76fb0
4 changed files with 108 additions and 81 deletions

View File

@ -1,4 +1,5 @@
import { defineStore } from 'pinia'
import axios from "axios";
export const useUserStore = defineStore('user', {
state: () => ({
@ -15,5 +16,73 @@ export const useUserStore = defineStore('user', {
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);
}
},
})

View File

@ -1,5 +1,4 @@
<script>
import axios from "axios";
import {useUserStore} from "../../store/user.js";
export default {
@ -15,25 +14,23 @@ export default {
}),
methods: {
loginAction(){
axios.post(
'/api/auth/login',
{'name': this.login,
'email': this.email,
'password': this.password,
'remember_me': this.rememberMe
}).then((res) => {
this.userStore.setUser(res.data.user);
this.userStore.setToken(res.data.accessToken);
this.$router.push('/');
}).catch((error)=>{
if (!error.response){
this.errorMessage = '';
this.errorMessageContainerStyle = 'display: none;';
return;
this.userStore.login(this.email, this.password, this.rememberMe).then((isLogged) => {
if (typeof isLogged == "boolean") {
if (isLogged){
this.errorMessage = '';
this.errorMessageContainerStyle = 'display: none;';
this.$router.push('/');
} else {
this.errorMessage = 'Authentication error';
this.errorMessageContainerStyle = '';
}
} else if (typeof isLogged == "string") {
this.errorMessage = isLogged;
this.errorMessageContainerStyle = '';
}
this.errorMessage = error.response.data.message;
this.errorMessageContainerStyle = '';
})
});
}
}
}

View File

@ -1,5 +1,4 @@
<script>
import axios from "axios";
import {useUserStore} from "../../store/user.js";
export default {
@ -16,20 +15,21 @@ export default {
}),
methods: {
registrationAction(){
axios.post(
'/api/auth/register',
{'name': this.login,
'email': this.email,
'password': this.password,
'c_password': this.repeatPassword
}).then((res) => {
this.userStore.setUser(res.data.user);
this.userStore.setToken(res.data.accessToken);
this.$router.push('/');
}).catch((error)=>{
this.errorMessage = error;
this.errorMessageContainerStyle = '';
})
this.userStore.registration(this.login, this.email, this.password, this.repeatPassword).then((isRegistred)=>{
if (typeof isRegistred == "boolean") {
if (isRegistred){
this.errorMessage = '';
this.errorMessageContainerStyle = 'display: none;';
this.$router.push('/');
} else {
this.errorMessage = 'Registration error';
this.errorMessageContainerStyle = '';
}
} else if (typeof isRegistred == "string") {
this.errorMessage = isRegistred;
this.errorMessageContainerStyle = '';
}
});
}
}
}

View File

@ -20,7 +20,6 @@
</template>
<script>
import axios from "axios";
import {useUserStore} from "../store/user.js";
import {watch} from "vue";
export default {
@ -28,61 +27,23 @@ export default {
data: () => ({
cardTitle: 'Hello world!',
isAuthenticated: false,
username: ''
username: '',
userStore: useUserStore()
}),
computed: {
user() {
const authStore = useUserStore();
return authStore.user;
return this.userStore.user;
},
},
methods: {
async logout() {
try {
const authStore = useUserStore();
let token = authStore.token;
await axios.get('/api/auth/logout',
{
headers:
{
Authorization: `Bearer ${token}`,
token: token
}
}
);
authStore.setUser(null);
authStore.setToken(null);
this.$router.push('/auth_options');
} catch (error) {
alert('Ошибка выхода');
}
},
checkUser(){
const authStore = useUserStore();
let token = authStore.token;
if (token){
axios.get(
'/api/auth/user',
{
headers:
{
Authorization: `Bearer ${token}`,
token: token
}
}
).then((res) => {
authStore.setUser(res.data);
}).catch((error)=>{
authStore.setUser(null);
authStore.setToken(null);
})
}
},
this.userStore.logout();
this.$router.push('/auth_options');
}
},
mounted() {
this.$router.push('/auth_options');
const authStore = useUserStore();
watch(authStore, (newStore, oldStore)=>{
watch(this.userStore, (newStore, oldStore)=>{
this.isAuthenticated = newStore.user !== null && newStore.user !== undefined;
if (this.isAuthenticated) {
this.$router.push('/wishlist');
@ -90,7 +51,7 @@ export default {
this.$router.push('/auth_options');
}
});
this.checkUser();
this.userStore.checkUser();
}
}
</script>