feat: gestion-utilisateur #1

Merged
Clement merged 37 commits from feat/gestion-utilisateur into master 2024-05-20 10:48:35 +00:00
6 changed files with 93 additions and 30 deletions
Showing only changes of commit 9116a1544e - Show all commits

14
front/src/env.d.ts vendored
View File

@ -1,11 +1,25 @@
/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />
import PocketBase from 'pocketbase'
export interface ImportMetaEnv { export interface ImportMetaEnv {
NODE_ENV: string NODE_ENV: string
APP_URL: string APP_URL: string
POCKETBASE_URL: string POCKETBASE_URL: string
GOOGLE_API_KEY: string
} }
interface ImportMeta { interface ImportMeta {
readonly env: ImportMetaEnv readonly env: ImportMetaEnv
} }
// eslint-disable-next-line @typescript-eslint/no-namespace
declare namespace App {
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface Locals {
pb: PocketBase
}
}

View File

@ -0,0 +1,27 @@
import PocketBase from 'pocketbase'
import { defineMiddleware } from 'astro/middleware'
import { getEnv } from 'libs/Env'
export const onRequest = defineMiddleware(async ({ locals, request }: any, next: () => any) => {
locals.pb = new PocketBase(getEnv('POCKETBASE_URL','http://localhost:8080'))
// load the store data from the request cookie string
locals.pb.authStore.loadFromCookie(request.headers.get('cookie') || '')
try {
// get an up-to-date auth store state by verifying and refreshing the loaded auth model (if any)
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
locals.pb.authStore.isValid && await locals.pb.collection('users').authRefresh()
} catch (_) {
// clear the auth store on failed refresh
locals.pb.authStore.clear()
}
const response = await next()
// send back the default 'pb_auth' cookie to the client with the latest store state
response.headers.append('set-cookie', locals.pb.authStore.exportToCookie())
return response
})

View File

@ -1,16 +1,21 @@
--- ---
import Layout from 'layouts/Layout.astro'; import Layout from 'layouts/Layout.astro'
import { getUser } from 'libs/AuthUtils'; import PocketBase from 'pocketbase'
const user = await getUser(Astro.cookies); const pb = Astro.locals.pb as PocketBase
const auth = pb.authStore
const user = auth.model
if(!user){ if(!auth.isValid){
return Astro.redirect("/account/login"); return Astro.redirect("/account/login");
} }
--- ---
<Layout title="Account setting"> <Layout title="Account setting">
<h1>Bonjour {user.name}</h1> <h1>Bonjour {user!.name}</h1>
<div>
<a href="/account/logout">deconnexion</a>
</div>
</Layout> </Layout>

View File

@ -1,32 +1,34 @@
--- ---
import Layout from "../../layouts/Layout.astro"; import Layout from "layouts/Layout.astro";
import PocketBase from 'pocketbase'; import AstroUtils from "libs/AstroUtils";
import AstroUtils from "../../libs/AstroUtils"; import PocketBase from 'pocketbase'
import { getUser, login } from "libs/AuthUtils";
const pb = Astro.locals.pb as PocketBase
const usr = await getUser(Astro.cookies) if(pb.authStore.isValid){
if (usr) { return Astro.redirect("/account")
// return Astro.redirect(route('/', {message: 'Vous êtes déjà connecté !'}))
} }
const res = await AstroUtils.wrap(async () => { const res = await AstroUtils.wrap(async () => {
if (Astro.request.method !== 'POST') { if (Astro.request.method !== 'POST') {
return return
} }
// FIXME checké si utilisateur deja connecté
const locals = Astro.locals
const form = await Astro.request.formData(); const form = await Astro.request.formData();
const request = { const request = {
user: form.get("username") as string, user: form.get("username") as string,
password: form.get("password") as string password: form.get("password") as string
} }
try {
await login(Astro.cookies, request) pb.collection('users').authWithPassword(request.user,request.password);
return Astro.redirect("/account") return Astro.redirect("/account")
} catch (error) {
console.log(error)
}
}) })
--- ---

View File

@ -0,0 +1,13 @@
---
import PocketBase from 'pocketbase'
const pb = Astro.locals.pb as PocketBase
if(pb.authStore.isValid){
pb.authStore.clear()
}
return Astro.redirect('/account/login')
---

View File

@ -1,18 +1,16 @@
--- ---
import PocketBase from 'pocketbase'; import Layout from 'layouts/Layout.astro';
import Layout from '../../layouts/Layout.astro'; import AstroUtils from 'libs/AstroUtils';
import AstroUtils from '../../libs/AstroUtils'; import PocketBase from 'pocketbase'
import { getUser, setUser } from 'libs/AuthUtils';
import type UserObj from 'models/User';
const connected = await getUser(Astro.cookies)
if(connected) { const pb = Astro.locals.pb as PocketBase
return Astro.redirect(route('/'))
if(pb.authStore.isValid){
return Astro.redirect("/account")
} }
await AstroUtils.wrap(async () => {
const res = await AstroUtils.wrap(async () => {
if (Astro.request.method !== 'POST'){ if (Astro.request.method !== 'POST'){
return return
} }
@ -24,8 +22,12 @@ const res = await AstroUtils.wrap(async () => {
password: form.get("password") as string, password: form.get("password") as string,
passwordConfirm: form.get("passwordConfirm") as string, passwordConfirm: form.get("passwordConfirm") as string,
} }
await setUser(Astro.cookies, request); try{
await pb.collection('users').create(request)
return Astro.redirect('account/login')
}catch(e){
console.log(e);
}
}) })
--- ---