如何有条件地发送 POST 请求以登录或注册用户
How to send a POST request conditionally to login or sign up users
我正在尝试发送 POST 请求以注册或登录用户,具体取决于 prop
(isSignUp
) 是 true
还是 false
在我的州。
我想要发生的事情:
如果 isSignUp
为真,我希望一个 API 端点被击中,如果不是,则另一个端点被击中。
端点单独工作,但是当我连接所有内容时,我只能让人们登录,一旦他们注册就不能登录。
州:
state = {
controls: {
email: {
elementType: "input",
elementConfig: {
type: "email",
placeholder: "Email Address"
},
value: "",
validation: {
required: true, // must not be empty
isEmail: true
},
valid: false,
touched: false
},
isSignUp: true
}
};
处理程序:
handleSubmit = event => {
this.props.onAuth(
this.state.controls.email.value,
this.state.controls.password.value,
this.state.controls.isSignUp
);
event.preventDefault();
};
switchAuthModeHandler = () => {
this.setState(prevState => {
console.log(prevState);
return {
isSignUp: !prevState.isSignUp
};
});
};
切换按钮文本和触发 authModeHandler 的逻辑
return (
<div className={classes.Auth}>
<form onSubmit={this.handleSubmit}>
{form}
<Button btnType="Success">SUBMIT</Button>
</form>
<Button clicked={this.switchAuthModeHandler} btnType="Danger">
SWITCH TO {this.state.isSignUp ? "SIGN IN" : "SIGN UP"}
{console.log(this.state.isSignUp)}
</Button>
</div>
);
const mapDispatchToProps = dispatch => {
return {
onAuth: (email, password, isSignUp) =>
dispatch(actions.auth(email, password, isSignUp))
};
};
触发 POST 请求登录或注册用户的操作
export const auth = (email, password, isSignUp) => {
return dispatch => {
dispatch(authStart());
const authData = {
email: email,
password: password,
returnSecureToken: true
};
{
isSignUp
? axios
.post(
"https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=AIzaSyAGT2vM3uzywo3zQUAxNnkpPB6Yr3Ohets",
authData
)
.then(response => {
console.log(response);
dispatch(
authSuccess(response.data.idToken, response.data.userId)
);
})
: axios
.post(
"https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=AIzaSyAGT2vM3uzywo3zQUAxNnkpPB6Yr3Ohets",
authData
)
.then(response => {
console.log(response);
dispatch(
authSuccess(response.data.idToken, response.data.userId)
);
})
.catch(err => {
console.log(err);
dispatch(authFail(err));
});
}
};
};
在状态下,您将 isSignup
NOT 置于控制之下,因此您应该通过 this.state.isSginUp
访问它
handleSubmit = event => {
this.props.onAuth(
this.state.controls.email.value,
this.state.controls.password.value,
this.state.isSignUp
);
event.preventDefault();
};
P.S 我建议使用 Redux 开发工具。它可以挽救生命。编码愉快!
我正在尝试发送 POST 请求以注册或登录用户,具体取决于 prop
(isSignUp
) 是 true
还是 false
在我的州。
我想要发生的事情:
如果 isSignUp
为真,我希望一个 API 端点被击中,如果不是,则另一个端点被击中。
端点单独工作,但是当我连接所有内容时,我只能让人们登录,一旦他们注册就不能登录。
州:
state = {
controls: {
email: {
elementType: "input",
elementConfig: {
type: "email",
placeholder: "Email Address"
},
value: "",
validation: {
required: true, // must not be empty
isEmail: true
},
valid: false,
touched: false
},
isSignUp: true
}
};
处理程序:
handleSubmit = event => {
this.props.onAuth(
this.state.controls.email.value,
this.state.controls.password.value,
this.state.controls.isSignUp
);
event.preventDefault();
};
switchAuthModeHandler = () => {
this.setState(prevState => {
console.log(prevState);
return {
isSignUp: !prevState.isSignUp
};
});
};
切换按钮文本和触发 authModeHandler 的逻辑
return (
<div className={classes.Auth}>
<form onSubmit={this.handleSubmit}>
{form}
<Button btnType="Success">SUBMIT</Button>
</form>
<Button clicked={this.switchAuthModeHandler} btnType="Danger">
SWITCH TO {this.state.isSignUp ? "SIGN IN" : "SIGN UP"}
{console.log(this.state.isSignUp)}
</Button>
</div>
);
const mapDispatchToProps = dispatch => {
return {
onAuth: (email, password, isSignUp) =>
dispatch(actions.auth(email, password, isSignUp))
};
};
触发 POST 请求登录或注册用户的操作
export const auth = (email, password, isSignUp) => {
return dispatch => {
dispatch(authStart());
const authData = {
email: email,
password: password,
returnSecureToken: true
};
{
isSignUp
? axios
.post(
"https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=AIzaSyAGT2vM3uzywo3zQUAxNnkpPB6Yr3Ohets",
authData
)
.then(response => {
console.log(response);
dispatch(
authSuccess(response.data.idToken, response.data.userId)
);
})
: axios
.post(
"https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=AIzaSyAGT2vM3uzywo3zQUAxNnkpPB6Yr3Ohets",
authData
)
.then(response => {
console.log(response);
dispatch(
authSuccess(response.data.idToken, response.data.userId)
);
})
.catch(err => {
console.log(err);
dispatch(authFail(err));
});
}
};
};
在状态下,您将 isSignup
NOT 置于控制之下,因此您应该通过 this.state.isSginUp
handleSubmit = event => {
this.props.onAuth(
this.state.controls.email.value,
this.state.controls.password.value,
this.state.isSignUp
);
event.preventDefault();
};
P.S 我建议使用 Redux 开发工具。它可以挽救生命。编码愉快!