我目前正在开发一个登录屏幕,使用djoser
进行身份验证。
我已经使用/users/
和/token/login/
端点分别在前端创建和登录用户(JSfetch
(,我知道如果用户已经存在,/users/
将返回一条错误消息(我用react hook形式显示(。
我的问题是:有没有一种方法可以验证用户是否已经只存在于他们的电子邮件中(而不需要尝试创建一个帐户并从错误消息中计算出来(
根据我的发现,Djoser没有提供检查电子邮件是否存在的方法,所以我写了一个APIView
class CheckEmail(APIView):
permission_classes = [IsAuthenticatedOrReadOnly]
def get(self, request, format=None):
email = request.GET.get('email')
user = UserAccount.objects.filter(email=email)
if user:
return Response('Email exists')
else:
return Response('Welcome aboard!')
并使用Yup和Formik的get请求:
const LoginSchema = Yup.object().shape({
checkEmail: Yup.boolean().default(true),
email: Yup.string()
.email("Please enter valid email")
.required("Email is required")
.when("checkEmail", {
is: true,
then: Yup.string()
.test({
message: () => "Email already exists",
test: async(email) => {
if(email) {
try {
let response = await axios.get(`http://localhost:8000/accounts/users/check_email/?email=${email}`);
if (response.data === 'Welcome aboard!') {
return true;
} else {
return false;
}
} catch (error) {
//console.log(error);
}
}
}
})
}),
希望能帮助