我正在尝试通过使用发送电子邮件链接来执行电子邮件验证
sendEmailVerification
。我在电子邮件中收到了一封电子邮件,内容如下:
http://localhost:3000/signup-success?mode=verifyEmail&oobCode=oKyOD4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAF-XCNUIg&apiKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lang=en
我怀疑要验证电子邮件,我们需要一个不同于
signInWithEmailLink
?
它重定向到我的注册成功页面,如下所示:
import React, { ReactElement } from 'react';
import auth from '../firebase/firebase_client';
import {
User,
isSignInWithEmailLink,
signInWithEmailLink,
} from 'firebase/auth';
import { frontendRoutes } from '../components/constants/frontend-routes';
import Link from 'next/link';
import { useAppDispatch } from '../redux/app/hooks';
import { updateNotification } from '../redux/slices/notifications';
import { useRouter } from 'next/router';
export default function SignupSuccess(): ReactElement {
const [user, setUser] = React.useState<User | null>(null);
const dispatch = useAppDispatch();
const [emailVerified, setEmailVerified] = React.useState(false);
const router = useRouter();
React.useEffect(() => {
auth.onAuthStateChanged((user) => {
let email;
if (user !== null) {
setUser(user);
email = user.email;
console.log('Email = ', email, user.emailVerified);
if (isSignInWithEmailLink(auth, window.location.href)) {
}
} else {
email = window.prompt('Please provide your email for confirmation');
}
if (email) {
signInWithEmailLink(auth, email, window.location.href)
.then((result) => {
const user = result.user.displayName;
dispatch(
updateNotification({
message: `Congrats ${
user || 'User'
}. Your Email has been verified.`,
status: 'success',
title: 'Verification Success',
})
);
console.log('Success');
setEmailVerified(true);
})
.catch((error) => {
console.log(
'Error occured while verifying: ' + error.code,
error.message
);
console.log('Error = ', error);
dispatch(
updateNotification({
message: `Verification Failed. Common errors could be invalid email and invalid or expired OTPs.`,
status: 'error',
title: 'Verification Failed',
})
);
});
} else {
dispatch(
updateNotification({
message: 'Verification Failed as no email was provided',
status: 'error',
title: 'Verification Failed',
})
);
setTimeout(() => router.push('/'), 3000);
}
});
}, [dispatch, router]);
if (user) {
return (
<div>
<h1>Welcome {user.email}</h1>
{emailVerified ? (
<p>
Congrats, your email has been verified! Please wait for admin
approval before you could start using Break Free Services. Go Back
to{' '}
<Link href={frontendRoutes.LOGIN_FOR_MERCHANT_INDIVIDUAL}>
Login Page
</Link>{' '}
</p>
) : (
<p>Verifying...</p>
)}
</div>
);
}
return <div>Continue to Sign Up First.</div>;
}
我在firebase中启用的提供商有:-
Email Provider
和
Phone Number
。但我还是犯了这个错误,有人能告诉我出了什么问题吗?
编辑1:
我刚刚意识到我打的方法电话只是用电子邮件登录,而不是验证一封。似乎没有办法将用户重定向到你的网站,然后从那里处理响应,除非你有自己的自定义域。如果有人知道如何将用户重定向到localhost或您的网站并从那里进行验证,请添加它,否则我将关闭问题。