Skip to content

Instantly share code, notes, and snippets.

@lucaspmarra
Created November 25, 2023 01:29
Show Gist options
  • Select an option

  • Save lucaspmarra/f770393abd4136976ad3aad115ed4752 to your computer and use it in GitHub Desktop.

Select an option

Save lucaspmarra/f770393abd4136976ad3aad115ed4752 to your computer and use it in GitHub Desktop.
import { defineStore } from 'pinia';
import { reactive, toRefs } from 'vue';
import { supabase } from '@/lib/supabaseClient.js';
import router from '@/router/index.js';
export const useAuthStore = defineStore('auth', () => {
const state = reactive({
session: '',
user: '',
error: ''
});
supabase.auth.getSession().then(({ data }) => {
state.session = data.session;
console.log('Session data: ', data.session);
});
supabase.auth.onAuthStateChange((_, _session) => {
state.session = _session;
console.log('Session changed: ', _session);
});
const isAuthenticated = () => {
return !!state.session;
};
const signOut = () => {
return new Promise((resolve, reject) => {
supabase.auth
.signOut()
.then(() => {
console.log('Signed out');
router.replace('/');
resolve();
})
.catch((e) => {
state.error = e.message;
console.error(e);
reject(e);
});
});
};
const signIn = (payload) => {
return new Promise((resolve, reject) => {
supabase.auth
.signInWithPassword({
email: payload.email,
password: payload.password
})
.then(({ data, error }) => {
if (error) {
state.error = error.message;
console.log('Login error: ', state.error);
reject(state.error);
}
else {
state.user = data;
resolve(data);
}
});
});
};
const getProfile = () => {
return new Promise((resolve, reject) => {
if (state.session) {
const { user } = state.session;
supabase
.from('profiles')
.select('*')
.eq('user_id', user.id)
.single()
.then(({ data, error }) => {
if (error) {
state.error = error.message;
console.log('Profile error: ', error);
reject(error);
}
else {
state.user = data;
console.log('User data: ', data);
resolve(data);
}
});
}
else {
console.log('Session is not available');
reject('Session is not available');
}
});
};
const updateProfile = (payload) => {
return new Promise((resolve, reject) => {
supabase
.from('profiles')
.upsert(payload)
.then(({ data, error }) => {
if (error) {
state.error = error.message;
console.log('Profile error: ', state.error);
reject(state.error);
}
else {
state.user = data;
console.log('User data: ', data);
resolve(data);
}
});
});
};
const signUp = (payload) => {
return new Promise((resolve, reject) => {
supabase.auth
.signUp({
email: payload.email,
password: payload.password,
options: {
data: {
first_name: payload.first_name,
last_name: payload.last_name,
cpf: payload.cpf,
birthday: payload.birthday,
street: payload.street,
city: payload.city,
state: payload.state,
postal_code: payload.postal_code,
country: payload.country
}
}
})
.then(({ data, error }) => {
if (error) {
state.error = error.message;
console.log('Register error: ', state.error);
reject(state.error);
}
else {
state.user = data.user;
resolve(data.user);
}
});
});
};
const resetPassword = (payload) => {
return new Promise((resolve, reject) => {
supabase.auth
.resetPasswordForEmail(payload.email, {
redirectTo:
'https://adopt-a-paw.onrender.com/forgot-password/update-password'
// redirectTo: 'http://localhost:5173/forgot-password/update-password',
})
.then(({ error }) => {
if (error) {
console.log('error:', error.message);
state.error = error.message || 'Ocorreu um erro';
reject(state.error);
}
else {
resolve();
}
});
});
};
const updatePassword = (payload) => {
return new Promise((resolve, reject) => {
supabase.auth.updateUser(payload).then(({ error }) => {
if (error) {
state.error = error.message || 'Ocorreu um erro';
reject(state.error);
}
else {
resolve();
}
});
});
};
return {
...toRefs(state),
isAuthenticated,
signIn,
signOut,
signUp,
getProfile,
resetPassword,
updatePassword
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment