从 Firebase Auth REST 获得 400 响应 API
Getting 400 response from Firebase Auth REST API
我正在学习 React 并试图了解如何使用 Firebase 进行注册。只是找不到我做错了什么。谢谢大家的帮助。我正在使用来自此处的请求 link:https://firebase.google.com/docs/reference/rest/auth?hl=cs
这是我的请求代码:
export const signInUser = () => {
return async (dispatch) => {
const sendSignInRequest = async () => {
const response = await fetch(
"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE",
{
method: "POST",
body: JSON.stringify({
email: "QWERTY12345@GMAIL.COM",
password: "12345TREWQ!asd",
returnSecureToken: true,
}),
headers: {
"Content-Type": "application/json",
},
}
).then((res) => {
console.log(res);
return res;
});
return response;
};
try {
const respnseStatus = await sendSignInRequest();
} catch (error) {
console.log(error);
}
};
};
这是我从服务器得到的:
Response {
type: 'cors',
url: 'https://identitytoolkit.googleapis.com/v1/accounts…ignUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE',
redirected: false,
status: 400,
ok: false,
…}
谢谢。
- 我认为这里的错误是这封电子邮件已经存在,因为您对其进行了硬编码,因此它只会在第一次尝试时成功,然后它就会已经存在,您应该检查响应状态是否给您错误。
在 firebase 中使用电子邮件和密码注册时可能会遇到三种类型的错误
- 第一封邮件已经存在
- 第二个是TOO_MANY_ATTEMPTS_TRY_LATER
- 第三个是WEAK_PASSWORD:密码至少要有6个字符,
最好在之前至少检查 6 个字符的密码
将它发送到 API 这样您就可以始终避免第三个错误。
- 顺便说一下,当您使用 async/await 时,您不需要在这里使用 then,因此您的代码将像那样
export const signInUser = (email,password) => {
return async (dispatch) => {
const sendSignInRequest = async () => {
const response = await fetch(
"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE",
{
method: "POST",
body: JSON.stringify({
email: email
password: password
returnSecureToken: true,
}),
headers: {
"Content-Type": "application/json",
},
}
)
const data = await response.JSON();
if (response.ok) {
dispatch({type:'SIGN-UP'})
} else if (!respnose.ok && data.error.message === "EMAIL_EXISTS"){
console.log('this email is already exist')
} else if(!respnose.ok&data.error.message ==="TOO_MANY_ATTEMPTS_TRY_LATER"){
alert('TOO_MANY_ATTEMPTS_TRY_LATER')
}
};
try {
const respnseStatus = await sendSignInRequest();
} catch (error) {
console.log(error);
}
}
};
我正在学习 React 并试图了解如何使用 Firebase 进行注册。只是找不到我做错了什么。谢谢大家的帮助。我正在使用来自此处的请求 link:https://firebase.google.com/docs/reference/rest/auth?hl=cs
这是我的请求代码:
export const signInUser = () => {
return async (dispatch) => {
const sendSignInRequest = async () => {
const response = await fetch(
"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE",
{
method: "POST",
body: JSON.stringify({
email: "QWERTY12345@GMAIL.COM",
password: "12345TREWQ!asd",
returnSecureToken: true,
}),
headers: {
"Content-Type": "application/json",
},
}
).then((res) => {
console.log(res);
return res;
});
return response;
};
try {
const respnseStatus = await sendSignInRequest();
} catch (error) {
console.log(error);
}
};
};
这是我从服务器得到的:
Response {
type: 'cors',
url: 'https://identitytoolkit.googleapis.com/v1/accounts…ignUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE',
redirected: false,
status: 400,
ok: false,
…}
谢谢。
- 我认为这里的错误是这封电子邮件已经存在,因为您对其进行了硬编码,因此它只会在第一次尝试时成功,然后它就会已经存在,您应该检查响应状态是否给您错误。
在 firebase 中使用电子邮件和密码注册时可能会遇到三种类型的错误
- 第一封邮件已经存在
- 第二个是TOO_MANY_ATTEMPTS_TRY_LATER
- 第三个是WEAK_PASSWORD:密码至少要有6个字符, 最好在之前至少检查 6 个字符的密码 将它发送到 API 这样您就可以始终避免第三个错误。
- 顺便说一下,当您使用 async/await 时,您不需要在这里使用 then,因此您的代码将像那样
export const signInUser = (email,password) => {
return async (dispatch) => {
const sendSignInRequest = async () => {
const response = await fetch(
"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE",
{
method: "POST",
body: JSON.stringify({
email: email
password: password
returnSecureToken: true,
}),
headers: {
"Content-Type": "application/json",
},
}
)
const data = await response.JSON();
if (response.ok) {
dispatch({type:'SIGN-UP'})
} else if (!respnose.ok && data.error.message === "EMAIL_EXISTS"){
console.log('this email is already exist')
} else if(!respnose.ok&data.error.message ==="TOO_MANY_ATTEMPTS_TRY_LATER"){
alert('TOO_MANY_ATTEMPTS_TRY_LATER')
}
};
try {
const respnseStatus = await sendSignInRequest();
} catch (error) {
console.log(error);
}
}
};