import { AuthProvider } from "@pankod/refine-core";
import nookies from "nookies";
import { supabaseClient } from "./utility";
export const authProvider: AuthProvider = {
login: async ({ email, password }) => {
console.time("authProvider login")
const { data, error } = await supabaseClient.auth.signInWithPassword({
email,
password,
});
if (error) {
console.timeEnd("authProvider login")
return Promise.reject(error);
}
if (data?.session) {
nookies.set(null, "token", data.session.access_token, {
maxAge: 30 * 24 * 60 * 60,
path: "/",
});
console.timeEnd("authProvider login")
return Promise.resolve();
}
// for third-party login
return Promise.resolve(false);
},
logout: async () => {
console.time("authProvider logout")
nookies.destroy(null, "token");
const { error } = await supabaseClient.auth.signOut();
if (error) {
console.timeEnd("authProvider logout")
return Promise.reject(error);
}
console.timeEnd("authProvider logout")
return Promise.resolve("/");
},
checkError: () => Promise.resolve(),
checkAuth: async (ctx) => {
console.time("authProvider checkAuth")
const { token } = nookies.get(ctx);
const { data } = await supabaseClient.auth.getUser(token);
const { user } = data;
if (user) {
console.timeEnd("authProvider checkAuth")
return Promise.resolve();
}
console.timeEnd("authProvider checkAuth")
return Promise.reject();
},
getPermissions: async () => {
console.time("authProvider getPermissions")
const user = await supabaseClient.auth.getUser();
if (user) {
console.timeEnd("authProvider getPermissions")
return Promise.resolve(user.data.user?.role);
}
},
getUserIdentity: async () => {
console.time("authProvider getUserIdentity")
const { data: { user } } = await supabaseClient.auth.getUser();
if (user) {
console.timeEnd("authProvider getUserIdentity")
return Promise.resolve({
...user,
name: user.email,
});
}
console.timeEnd("authProvider getUserIdentity")
return Promise.reject()
},
register: async ({ email, password }) => {
console.time("authProvider register")
const { data, error } = await supabaseClient.auth.signUp({
email,
password
});
if (error) {
console.timeEnd("authProvider register")
return Promise.reject(error);
}
if (data) {
console.timeEnd("authProvider register")
return Promise.resolve("/registration-success");
}
},
forgotPassword: async ({ email }) => {
console.time("authProvider forgotPassword")
const { data, error } = await supabaseClient.auth.resetPasswordForEmail(
email,
{
redirectTo: `${window.location.origin}/update-password`,
}
);
if (error) {
console.timeEnd("authProvider forgotPassword")
return Promise.reject(error);
}
if (data) {
console.timeEnd("authProvider forgotPassword")
return Promise.resolve();
}
},
updatePassword: async ({ password }) => {
console.time("authProvider updatePassword")
const { data, error } = await supabaseClient.auth.updateUser({
password,
});
}
}
import { AuthProvider } from "@pankod/refine-core";
import nookies from "nookies";
import { supabaseClient } from "./utility";
export const authProvider: AuthProvider = {
login: async ({ email, password }) => {
console.time("authProvider login")
const { data, error } = await supabaseClient.auth.signInWithPassword({
email,
password,
});
if (error) {
console.timeEnd("authProvider login")
return Promise.reject(error);
}
if (data?.session) {
nookies.set(null, "token", data.session.access_token, {
maxAge: 30 * 24 * 60 * 60,
path: "/",
});
console.timeEnd("authProvider login")
return Promise.resolve();
}
// for third-party login
return Promise.resolve(false);
},
logout: async () => {
console.time("authProvider logout")
nookies.destroy(null, "token");
const { error } = await supabaseClient.auth.signOut();
if (error) {
console.timeEnd("authProvider logout")
return Promise.reject(error);
}
console.timeEnd("authProvider logout")
return Promise.resolve("/");
},
checkError: () => Promise.resolve(),
checkAuth: async (ctx) => {
console.time("authProvider checkAuth")
const { token } = nookies.get(ctx);
const { data } = await supabaseClient.auth.getUser(token);
const { user } = data;
if (user) {
console.timeEnd("authProvider checkAuth")
return Promise.resolve();
}
console.timeEnd("authProvider checkAuth")
return Promise.reject();
},
getPermissions: async () => {
console.time("authProvider getPermissions")
const user = await supabaseClient.auth.getUser();
if (user) {
console.timeEnd("authProvider getPermissions")
return Promise.resolve(user.data.user?.role);
}
},
getUserIdentity: async () => {
console.time("authProvider getUserIdentity")
const { data: { user } } = await supabaseClient.auth.getUser();
if (user) {
console.timeEnd("authProvider getUserIdentity")
return Promise.resolve({
...user,
name: user.email,
});
}
console.timeEnd("authProvider getUserIdentity")
return Promise.reject()
},
register: async ({ email, password }) => {
console.time("authProvider register")
const { data, error } = await supabaseClient.auth.signUp({
email,
password
});
if (error) {
console.timeEnd("authProvider register")
return Promise.reject(error);
}
if (data) {
console.timeEnd("authProvider register")
return Promise.resolve("/registration-success");
}
},
forgotPassword: async ({ email }) => {
console.time("authProvider forgotPassword")
const { data, error } = await supabaseClient.auth.resetPasswordForEmail(
email,
{
redirectTo: `${window.location.origin}/update-password`,
}
);
if (error) {
console.timeEnd("authProvider forgotPassword")
return Promise.reject(error);
}
if (data) {
console.timeEnd("authProvider forgotPassword")
return Promise.resolve();
}
},
updatePassword: async ({ password }) => {
console.time("authProvider updatePassword")
const { data, error } = await supabaseClient.auth.updateUser({
password,
});
}
}