I’m having this error AuthSessionMissingError: Auth session missing!
on local development when i tried to update user password on my password reset flow my app is built on nextjs. I had recieved the email with the url configured to redirect but it showed like this:
http://localhost:8081/update-password#access_token=eyJhb...&expires_in=3600&refresh_token=QhVGnqZytUsjj946C1...&token_type=bearer&type=recovery
As you can see i havent received any code on the url.
For the pasword recovery initial flow i did:
const sendRecoveryEmail = async():Promise<void> => {
setIsSending(true);
let url = process.env.NODE_ENV === "development" ? `http://localhost:8081/update-password` : `https://www.somsite.com/update-password`;
if(email === "") {
emptyEmailToaster();
return;
}
const { data, error } = await supabase.auth.resetPasswordForEmail(email, {
redirectTo: url,
});
setIsSending(false);
recoveryEmailSentToaster();
};
and for updating the user password:
const [isSmallerScreenMobile] = useMediaQuery('(max-width: 500px)');
const [password, setPassword] = useState<string | "">("");
const [passwordConfirmation, setPasswordConfirmation] = useState<string | "">("");
const [isUpdating, setIsUpdating] = useState<boolean>(false);
const handleInfo = (e:ChangeEvent<HTMLInputElement>):void => {
const { name, value } = e.target;
setPassword(value);
};
useEffect(() => {
}, []);
const handleInfoPasswordConfirmation = (e:ChangeEvent<HTMLInputElement>):void => {
const { name, value } = e.target;
setPasswordConfirmation(value);
};
const emptyPasswordToaster = () => {
const toastOptions:ToastOptions = {
title: 'Debes colocar la nueva contraseña.',
description: "",
status: 'error',
duration: 1000,
isClosable: true,
}
return toast(toastOptions);
}
const passwordDoesntMarchToaster = () => {
const toastOptions:ToastOptions = {
title: 'Las contraseñas no coinciden.',
description: "",
status: 'error',
duration: 1000,
isClosable: true,
}
return toast(toastOptions);
}
const passwordLengthToaster = () => {
const toastOptions:ToastOptions = {
title: 'Las contraseña debe tener al menos 8 caracteres.',
description: "",
status: 'error',
duration: 1000,
isClosable: true,
}
return toast(toastOptions);
}
const updateUserPassword = async():Promise<void> => {
setIsUpdating(true);
const { data: { session }, error: sessionError } = await supabase.auth.getSession();
console.log(session)
console.log(sessionError)
// if (sessionError || !session) {
// console.log('Session error or no session found');
// setIsUpdating(false);
// return;
// }
if(password.length < 8) {
passwordLengthToaster();
setIsUpdating(false);
return;
}
if(password === '') {
emptyPasswordToaster();
setIsUpdating(false);
return;
}
if(password !== passwordConfirmation) {
passwordDoesntMarchToaster();
setIsUpdating(false);
return;
};
try {
const { data, error } = await supabase.auth.updateUser({
password: password,
});
setIsUpdating(false);
console.log(data);
console.log(error);
} catch (err) {
console.log('There was an error trying to update the password ', err);
}
};