# Autentificación
# Archivos base
# Archivo main.ts
Importamos las librerías de supabase y comprobamos si tenemos una sesión abierta.
import { supabase } from './lib/supabase'
import { userSession } from '@/lib/useAuth'
supabase.auth.onAuthStateChange((event, session) => {
userSession.value = session
})
# Archivo App.vue
No cambia nada es el mismo que el de la tienda.
# Archivo views > Products.vue
No cambia nada es el mismo que el de la tienda.
# Archivo views > Cart.vue
No cambia nada es el mismo que el de la tienda.
# Autentificación
# Archivo views > Home.vue
Comprueba si estamos en modo de recuperación/actualización de la contraseña, en este caso mostrará el componente PasswordReset donde introduciremos una nueva contraseña.
import Auth from "@/components/Auth.vue";
import { getParameterByName } from "@/lib/helpers";
import { userSession } from "@/lib/useAuth";
import { almacenAuth } from "@/stores/user";
import PasswordReset from "@/components/PasswordReset.vue";
const showPasswordReset = computed(() => {
const requestType = getParameterByName("type", location.href);
return requestType === "recovery";
});
<div
v-if="showPasswordReset"
class="w-full h-full flex flex-col justify-center items-center p-4"
>
<PasswordReset />
</div>
# Componente > PasswordReset "v-if"
Tenemos la constante ref a contraseña, el input y el botón de actualización de la contraseña
const password = ref('')
<input
type="password"
class="block appearance-none w-full bg-white border border-grey-light hover:border-grey px-2 py-2 rounded shadow"
placeholder="Tú contraseña"
v-model="(password)">
</input>
<a @click="user.handleUpdateUser({password: password})" href="#" class="btn btn-accent" tabindex="0">
Actualizar contraseña
</a>
# Componente > Auth "v-else-if"
Comprobamos si tenemos una sesión iniciada, si no la tenemos muestra el componente de autentificación.
const email = ref('')
const password = ref('')
<input
type="text"
class="block appearance-none w-full bg-white border border-grey-light hover:border-grey px-2 py-2 rounded shadow"
placeholder="Tú correo"
v-model="email">
</input>
<input
type="password"
class="block appearance-none w-full bg-white border border-grey-light hover:border-grey px-2 py-2 rounded shadow"
placeholder="Tú contraseña"
v-model="password">
</input>
<a @click="user.handleSignup({ email, password })" href="#" class="btn-black" tabindex="0">
Regístrate
</a>
<a @click="user.handleLogin({ email, password })" href="#" class="btn-black-outline">
<span v-if="password.length">Entrar</span>
<span v-else> Enviar enlace mágico </span>
</a>
<a
@click.prevent="user.handlePasswordReset"
href="/"
class="font-medium text-indigo-600 hover:text-indigo-500 focus:outline-none focus:underline transition ease-in-out duration-150"
>
Forgot your password?
</a>
# Componente > ProductCard "v-else"
Es igual que el tutorial de la tienda
# Botón cerrar sesión
<button class="btn-black w-full mt-12" @click="user.handleLogout">
Logout
</button>