authenticación terminada

This commit is contained in:
2025-02-05 20:17:44 +01:00
parent d0708aa45b
commit 874f893d6d
4 changed files with 91 additions and 12 deletions

View File

@@ -4,10 +4,10 @@
<q-toolbar>
<q-toolbar-title>
Quasar App
{{ store.user ? store.user.email : '' }}
</q-toolbar-title>
<div>Quasar v{{ $q.version }}</div>
<div><q-btn color="secondary" @click="logout">Logout</q-btn></div>
</q-toolbar>
</q-header>
@@ -18,5 +18,26 @@
</template>
<script setup>
import { supabaseStore } from '../stores/supabaseStore'
import useSupabase from '../boot/supabase'
import { useRouter } from 'vue-router'
const store = supabaseStore()
const { supabase } = useSupabase()
const router = useRouter()
const logout = async () => {
try {
const { error } = await supabase.auth.signOut()
if (error) throw error
store.user = null
store.session = null
router.push('/login')
} catch (error) {
if (error instanceof Error) {
alert(error.message)
}
}
}
</script>

View File

@@ -4,14 +4,17 @@
<div class="column">
<div class="row"></div>
<h1>Página principal</h1>
<h3 v-if="store.user">You are logged in as {{ store.user.email }}
</h3>
</div>
</div>
</q-page>
</template>
<script setup>
//import { supabaseStore } from '../stores/supabaseStore'
//const store = supabaseStore()
import { supabaseStore } from '../stores/supabaseStore'
//import useSupabase from '../boot/supabase'
const store = supabaseStore()
//const { supabase } = useSupabase()
</script>

View File

@@ -7,17 +7,30 @@
<q-card v-if="onLogin" square bordered class="q-pa-lg shadow-1">
<q-card-section>
<q-form class="q-gutter-md">
<q-input square filled clearable v-model="email" type="email" label="email" />
<q-input square filled clearable v-model="password" type="password" label="password" />
<q-input square filled v-model="email" type="email" label="email">
<template v-slot:append>
<q-icon name="close" @click="email = ''" class="cursor-pointer" />
</template>
</q-input>
<q-input square filled v-model="password" :type="isPwd ? 'password' : 'text'" label="password">
<template v-slot:append>
<q-icon name="close" @click="password = ''" class="cursor-pointer" />
<q-icon :name="isPwd ? 'visibility_off' : 'visibility'" class="cursor-pointer"
@click="isPwd = !isPwd" />
</template>
</q-input>
</q-form>
</q-card-section>
<q-card-actions class="q-px-md">
<q-btn unelevated color="light-green-7" size="lg" class="full-width" label="Login" @click='store.texto' />
<q-btn unelevated color="light-green-7" size="lg" class="full-width" label="Login" @click='login'
:disable="email.length < 3 || password.length < 6" />
</q-card-actions>
<q-card-section class="text-center q-pa-none">
<p class="text-grey-6 cursor-pointer">
<span @click='onLogin = false'>Not reigistered? Created an Account</span><br>
<span @click='onLogin = false'>Not verified? Resend email</span>
<span @click='onLogin = false; email = ""; password = ""; repassword = "";'>Not reigistered? Created an
Account</span><br>
<span @click='onLogin = false; email = ""; password = ""; repassword = "";'>Not verified? Resend
email</span>
</p>
</q-card-section>
</q-card>
@@ -29,14 +42,18 @@
<q-icon name="close" @click="email = ''" class="cursor-pointer" />
</template>
</q-input>
<q-input square filled v-model="password" type="password" label="password">
<q-input square filled v-model="password" :type="isPwd1 ? 'password' : 'text'" label="password">
<template v-slot:append>
<q-icon name="close" @click="password = ''" class="cursor-pointer" />
<q-icon :name="isPwd1 ? 'visibility_off' : 'visibility'" class="cursor-pointer"
@click="isPwd1 = !isPwd1" />
</template>
</q-input>
<q-input square filled v-model="repassword" type="password" label="confirm password">
<q-input square filled v-model="repassword" :type="isPwd2 ? 'password' : 'text'" label="confirm password">
<template v-slot:append>
<q-icon name="close" @click="repassword = ''" class="cursor-pointer" />
<q-icon :name="isPwd2 ? 'visibility_off' : 'visibility'" class="cursor-pointer"
@click="isPwd2 = !isPwd2" />
</template>
</q-input>
</q-form>
@@ -46,7 +63,9 @@
:disable="email.length < 3 || password.length < 6 || repassword.length < 6 || password !== repassword" />
</q-card-actions>
<q-card-section class="text-center q-pa-none">
<p class="text-grey-6 cursor-pointer" @click='onLogin = true'>You are already registered, login now</p>
<p class="text-grey-6 cursor-pointer" @click='onLogin = true; email = ""; password = ""; repassword = "";'>
You are
already registered?, Login now</p>
</q-card-section>
</q-card>
@@ -60,7 +79,9 @@ import { ref } from 'vue'
import { supabaseStore } from '../stores/supabaseStore'
import useSupabase from '../boot/supabase'
import { useQuasar } from 'quasar'
import { useRouter } from 'vue-router'
const router = useRouter()
const { supabase } = useSupabase()
const store = supabaseStore()
const $q = useQuasar()
@@ -69,6 +90,9 @@ let email = ref('')
let password = ref('')
let repassword = ref('')
let onLogin = ref(true)
let isPwd = ref(true)
let isPwd1 = ref(true)
let isPwd2 = ref(true)
const registrar = async () => {
try {
@@ -94,6 +118,36 @@ const registrar = async () => {
alert(error.message)
}
}
finally {
$q.loading.hide()
}
}
const login = async () => {
try {
$q.loading.show({
delay: 200 // ms
})
const { data, error } = await supabase.auth.signInWithPassword({
email: email.value,
password: password.value,
})
//console.log('user', data.user, '\nsession', data.session)
if (error) throw error
if (!data.user.user_metadata.email_verified) throw new Error('User is not verified')
store.user = data.user
store.session = data.session
$q.loading.hide()
router.push('/')
}
catch (error) {
if (error instanceof Error) {
alert(error.message)
}
}
finally {
$q.loading.hide()
}
}
</script>

View File

@@ -5,6 +5,7 @@ export const supabaseStore = defineStore('supabaseStore', {
// counter: 0
prueba: 'prueba',
user: null,
session: null
}),
getters: {