ソースを参照

Refactor login functionality and add error handling

Alejandro Rosales 1 年間 前
コミット
e1ccde4274
2 ファイル変更32 行追加9 行削除
  1. 7 6
      action/login.php
  2. 25 3
      pages/login.html

+ 7 - 6
action/login.php

@@ -1,8 +1,9 @@
 <?php
 require_once "{$_SERVER['DOCUMENT_ROOT']}/dependencies.php";
-$token = $db->querySingle("SELECT sign() as token")['token'];
-?>
-
-<script>
-    sessionStorage.setItem('token', JSON.stringify('<?= $token ?>'))
-</script>
+$token = $db->querySingle("SELECT sign(('{\"exp\":' || EXTRACT(EPOCH FROM NOW() + INTERVAL'1 day') || ', \"role\": \"app_user\"}')::JSON, '{$_ENV['KEY_ENCRYPT']}') as token");
+$_SESSION['user'] = [
+    'id' => 1,
+    'name' => 'Ángel Alfonso',
+];
+header('Content-Type: application/json');
+echo json_encode($token);

+ 25 - 3
pages/login.html

@@ -1,5 +1,27 @@
-<main class="container">
-    <form action="/action/login.php" method="post">
+<main class="container" v-scope>
+    <form action="/action/login.php" method="post" @submit.prevent="login">
         <button type="submit">Iniciar Sesión</button>
     </form>
-</main>
+</main>
+
+<script>
+    PetiteVue.createApp({
+        store,
+        async login() {
+            const response = await fetch('/action/login.php');
+            try {
+                const data = await response.json();
+                sessionStorage.setItem('token', data.token);
+            } catch (error) {
+                store.error = {
+                    title: 'Error al iniciar sesión',
+                    message: 'No se pudo iniciar sesión, intente de nuevo más tarde'
+                }
+            }
+            finally {
+                // reload
+                location.reload();
+            }
+        }
+    }).mount()
+</script>