handle login and constent login
This commit is contained in:
parent
cdf0827c91
commit
a5cebece43
@ -11,6 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@primevue/themes": "^4.2.5",
|
"@primevue/themes": "^4.2.5",
|
||||||
"axios": "^1.7.9",
|
"axios": "^1.7.9",
|
||||||
|
"js-cookie": "^3.0.5",
|
||||||
"primeicons": "^7.0.0",
|
"primeicons": "^7.0.0",
|
||||||
"primevue": "^4.2.5",
|
"primevue": "^4.2.5",
|
||||||
"swagger-ui": "^5.18.2",
|
"swagger-ui": "^5.18.2",
|
||||||
|
9
pnpm-lock.yaml
generated
9
pnpm-lock.yaml
generated
@ -14,6 +14,9 @@ importers:
|
|||||||
axios:
|
axios:
|
||||||
specifier: ^1.7.9
|
specifier: ^1.7.9
|
||||||
version: 1.7.9
|
version: 1.7.9
|
||||||
|
js-cookie:
|
||||||
|
specifier: ^3.0.5
|
||||||
|
version: 3.0.5
|
||||||
primeicons:
|
primeicons:
|
||||||
specifier: ^7.0.0
|
specifier: ^7.0.0
|
||||||
version: 7.0.0
|
version: 7.0.0
|
||||||
@ -644,6 +647,10 @@ packages:
|
|||||||
is-hexadecimal@1.0.4:
|
is-hexadecimal@1.0.4:
|
||||||
resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
|
resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
|
||||||
|
|
||||||
|
js-cookie@3.0.5:
|
||||||
|
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
js-file-download@0.4.12:
|
js-file-download@0.4.12:
|
||||||
resolution: {integrity: sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==}
|
resolution: {integrity: sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==}
|
||||||
|
|
||||||
@ -1779,6 +1786,8 @@ snapshots:
|
|||||||
|
|
||||||
is-hexadecimal@1.0.4: {}
|
is-hexadecimal@1.0.4: {}
|
||||||
|
|
||||||
|
js-cookie@3.0.5: {}
|
||||||
|
|
||||||
js-file-download@0.4.12: {}
|
js-file-download@0.4.12: {}
|
||||||
|
|
||||||
js-tokens@4.0.0: {}
|
js-tokens@4.0.0: {}
|
||||||
|
54
src/api.js
54
src/api.js
@ -1,11 +1,63 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
import Cookies from 'js-cookie';
|
||||||
|
|
||||||
const api = axios.create({
|
const api = axios.create({
|
||||||
baseURL: 'http://127.0.0.1:8000/api',
|
baseURL: 'http://127.0.0.1:8000/api',
|
||||||
timeout: 2500,
|
timeout: 2500,
|
||||||
|
withCredentials: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const createUser = async (userData) => {
|
export const createUser = async (userData) => {
|
||||||
const response = await api.post('/users', userData);
|
const response = await api.post('/users', userData);
|
||||||
|
const { access, refresh } = response.data;
|
||||||
|
|
||||||
|
Cookies.set('refresh', refresh,{
|
||||||
|
expires: 1,
|
||||||
|
secure: true,
|
||||||
|
sameSite: 'strict',
|
||||||
|
});
|
||||||
|
sessionStorage.setItem('access_token', access);
|
||||||
return response.data
|
return response.data
|
||||||
}
|
};
|
||||||
|
|
||||||
|
export const getuserinfo = async () => {
|
||||||
|
const response = await api.get('/users/me/', {
|
||||||
|
headers: {Authorization: `Bearer ${sessionStorage.getItem('access_token')}`},
|
||||||
|
});
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
|
const refreshAccessToken = async () => {
|
||||||
|
try {
|
||||||
|
const response = await api.post('/token/refresh', {'refresh': Cookies.get('refresh')}, {
|
||||||
|
withCredentials: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const { access, refresh } = response.data;
|
||||||
|
|
||||||
|
return [access, refresh];
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Refresh token request failed:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
api.interceptors.response.use(
|
||||||
|
(response) => response,
|
||||||
|
async (error) => {
|
||||||
|
if (error.response && error.response.status === 401) {
|
||||||
|
const [newAccessToken,newRefreshToken] = await refreshAccessToken();
|
||||||
|
if (newAccessToken) {
|
||||||
|
Cookies.set('refresh', newRefreshToken,{
|
||||||
|
expires: 1,
|
||||||
|
secure: true,
|
||||||
|
sameSite: 'strict',
|
||||||
|
});
|
||||||
|
error.config.headers['Authorization'] = `Bearer ${newAccessToken}`;
|
||||||
|
return api(error.config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// const response = await api.post('/users', userData, {
|
||||||
|
// headers: {Authorization: `Bearer ${sessionStorage.getItem('access_token')}`},);
|
@ -1,6 +1,6 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
import { createUser } from '../api.js';
|
import { createUser, getuserinfo} from '../api.js';
|
||||||
import { useToast } from 'primevue/usetoast';
|
import { useToast } from 'primevue/usetoast';
|
||||||
import PMessage from 'primevue/message';
|
import PMessage from 'primevue/message';
|
||||||
|
|
||||||
@ -9,6 +9,8 @@ const email = ref('');
|
|||||||
const password = ref('');
|
const password = ref('');
|
||||||
const errors = ref({ username: '', email: '' });
|
const errors = ref({ username: '', email: '' });
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
|
const isAuth = ref(false);
|
||||||
|
const userInfo = ref(null);
|
||||||
|
|
||||||
async function make_user() {
|
async function make_user() {
|
||||||
errors.value = { username: '', email: '' };
|
errors.value = { username: '', email: '' };
|
||||||
@ -34,12 +36,30 @@ async function make_user() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(async() => {
|
||||||
|
const accessToken = sessionStorage.getItem('access_token');
|
||||||
|
if (accessToken) {
|
||||||
|
isAuth.value = true;
|
||||||
|
try{
|
||||||
|
userInfo.value = await getuserinfo();}
|
||||||
|
catch (error){
|
||||||
|
console.error("erreur de récupération: ", error);
|
||||||
|
isAuth.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<span>StockSeeker Login</span>
|
<span>StockSeeker Login</span>
|
||||||
<div class="form-container">
|
<div v-if="isAuth" class="form-container">
|
||||||
|
<p v-if="userInfo">Bienvenue, {{ userInfo.username }}</p>
|
||||||
|
<p v-if="userInfo">email :{{ userInfo.email }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-else class="form-container">
|
||||||
<div class="form">
|
<div class="form">
|
||||||
<label for="username">Username:</label>
|
<label for="username">Username:</label>
|
||||||
<input type="text" class="p-inputtext" name="username" id="name" v-model="username" required>
|
<input type="text" class="p-inputtext" name="username" id="name" v-model="username" required>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user