我正在参加一个黑客马拉松,并尝试使用我以前从未使用过的 Ionic 4 (react) 连接到我制作的 Rails 数据库(在后端完成身份验证),该数据库托管在 heroku 上。我真的只需要在前端将身份验证操作连接到它,我遇到了很多问题,我找到的所有答案都在 Angular Ionic 中,而不是在 React Ionic 中。
该应用程序非常简单,实际上只包含 4 个主页面,一个是起始页,一个是资源页面,一个是主页,另一个是登录页面。登录页面将有一个注册和登录按钮(未通过身份验证时)和更改密码并退出(通过身份验证时)。我有单独的页面用于登录、注册和更改密码。我在文档中查看了示例,但没有找到,有没有我可以使用类似的示例/我该如何学习如何做到这一点?任何输入都非常有帮助,谢谢!
到目前为止,这就是我所拥有的垃圾,主要来自:
import { IonContent, IonHeader, IonItem, IonLabel, IonList, IonPage, IonTitle, IonToolbar } from '@ionic/react';
// updateUserName = (event: any) => {
// this.setState({ username: event.detail.value });
// };
const SignIn: React.FC = () => {
login= () => {
let url , credentials;
if(this.state.action == 'Login'){
url = CONFIG.API_ENDPOINT + '/users/login';
credentials = {
"user": {
"email": this.state.email,
"password": this.state.password
}
}
} else {
url = CONFIG.API_ENDPOINT + '/users';
credentials = {
"user": {
"email": this.state.email,
"password": this.state.password,
"username": this.state.username
}
}
}
fetch(url, {
method: 'POST',
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(credentials)
})
.then((res) => {
console.log(res);
if(res.status == 200){
return res.json();
} else {
if(this.state.action == 'SignUp') {
throw new Error("Error creating user");
} else {
throw new Error("Error Logging in")
}
}
} )
.then(
(result) => {
console.log(result);
localStorage.setItem("token",result.user.token);
localStorage.setItem("username", result.user.username);
localStorage.setItem("isLogin", "true");
localStorage.setItem("email", result.user.email);
this.event = new CustomEvent('loggedIn', {
detail: true
});
window.dispatchEvent(this.event);
},
(error) => {
console.error(error);
this.setState({toastMessage: error.toString(), toastState: true});
}
)
};
render() {
return(
<IonHeader title="Login">Sign</IonHeader>
<IonContent padding>
<div className="ion-text-center">
<img src={image} alt="logo" width="25%" />
</div>
<h1 className="ion-text-center conduit-title">conduit</h1>
<IonToast
isOpen={this.state.toastState}
onDidDismiss={() => this.setState(() => ({ toastState: false }))}
message= {this.state.toastMessage}
duration={400}
>
</IonToast>
<form action="">
<IonItem>
<IonInput onIonChange={this.updateEmail} type="email" placeholder="Email"></IonInput>
</IonItem>
{this.state.action === 'SignUp' ?
<IonItem>
<IonInput onIonChange={this.updateUserName} type="text" placeholder="Username"></IonInput>
</IonItem>
: <></>
}
<IonItem>
<IonInput onIonChange={this.updatePassword} type="password" placeholder="Password"></IonInput>
</IonItem>
</form>
<IonButton onClick={this.login}>{this.state.action}</IonButton>
</IonContent>
<IonFooter>
<IonToolbar text-center>
Click here to <a onClick={this.toggleAction}>{this.state.action === 'Login'? 'SignUp' : 'Login'}</a>
</IonToolbar>
</IonFooter>
</>
)
}
}