feat: Add account pages

Signed-off-by: Florian BOUILLON <f.bouillon@aptatio.com>
This commit is contained in:
Florian Bouillon 2023-06-21 19:55:52 +02:00
parent eac88b2ec3
commit dc80dec6a8
4 changed files with 97 additions and 2 deletions

View File

@ -1,6 +1,4 @@
---
const json = JSON.stringify(Astro.props)
/**
* note: you MUST only pass simple items that can go in JSON format natively
*/
@ -12,5 +10,6 @@ export function load<T extends {} = {}>(): T {
return JSON.parse(tag.innerText)
}
const json = JSON.stringify(Astro.props)
---
<script id="ASTRO_DATA" is:inline type="application/json" set:html={json}></script>

View File

@ -0,0 +1,47 @@
---
import URLManager from '@dzeio/url-manager'
import Layout from '../../layouts/Layout.astro'
import DaoFactory from '../../models/DaoFactory'
import { comparePassword } from '../../libs/AuthUtils'
const logout = new URLManager(Astro.url).query('logout')
if (typeof logout === 'string') {
DaoFactory.get('session').removeSession(Astro.response)
}
// DaoFactory.get('session').removeSession(Astro.response)
if (Astro.request.method === 'POST') {
const form = await Astro.request.formData()
const email = form.get('email') as string
const password = form.get('password') as string
const account = await DaoFactory.get('user').findOne({
email
})
if (!account) {
return
}
const valid = await comparePassword(password, account.password)
if (!valid) {
return
}
DaoFactory.get('session').setSession({
userId: account.id
}, Astro.response)
}
---
<Layout title="Welcome to Astro.">
<main>
<form>
<input type="email" name="email" />
<input type="password" name="password" />
<button>Connect</button>
<button></button>
</form>
</main>
</Layout>

View File

@ -0,0 +1,4 @@
---
return Astro.redirect('/account/login?logout')
---

View File

@ -0,0 +1,45 @@
---
import Layout from '../../layouts/Layout.astro'
import { hashPassword } from '../../libs/AuthUtils'
import DaoFactory from '../../models/DaoFactory'
let errorMessage: string | undefined
if (Astro.request.method === 'POST') {
const form = await Astro.request.formData()
const email = form.get('email') as string
const password = form.get('password') as string
const user = await DaoFactory.get('user').create({
email: email,
password: await hashPassword(password)
})
if (!user) {
errorMessage = 'User already exists'
return
}
DaoFactory.get('session').setSession({
userId: user.id
}, Astro.response)
}
---
<Layout title="Welcome to Astro.">
<main>
{errorMessage && (
<div>
{errorMessage}
</div>
)}
<form method="post">
<input type="email" name="email" id="email"/>
<input type="password" name="password" id="password" />
<input type="password" name="repeat-password" id="repeat-password">
<button>Register</button>
</form>
</main>
</Layout>