我为AWS Amplify创建了自己的自定义UI。我遵循关于如何做到这一点的详细指南,即使用Authenticator,覆盖"SignIn"one_answers"RequireNewPassword"的showComponent()
方法。这一切都很好。我可以登录并更改密码。我的问题是,我一辈子都无法在登录后获得我的应用程序默认工作路线。
我使用AppWithAuth
通用设置:
export default class AppWithAuth extends React.Component<{}, { authState: string }> {
classes: any;
constructor(props) {
super(props);
this.state = { authState: '' };
this.handleAuthStateChange = this.handleAuthStateChange.bind(this);
}
handleAuthStateChange(state) {
this.setState({ authState: state });
}
render() {
return (
<div>
{this.state.authState === 'signedIn' ? (
<Authenticator
theme={authTheme}
hideDefault={true}
//hide={[SignIn, RequireNewPassword]}
amplifyConfig={awsconfig}
onStateChange={this.handleAuthStateChange}>
<App />
</Authenticator>
) : (
<Authenticator
theme={authTheme}
hideDefault={true}
//hide={[SignIn, RequireNewPassword]}
amplifyConfig={awsconfig}
onStateChange={this.handleAuthStateChange}>
<ChangePassword {...this.props} />
<Login override={SignIn} {...this.props} />
</Authenticator>
)}
</div>
);
}
}
Login
扩展了SignIn
,仅在this._validAuthStates = ['signIn', 'signedOut', 'signedUp'];
时显示
ChangePassword
扩展了RequireNewPassword
,仅在this._validAuthStates = ['requireNewPassword'];
时显示
这两条路径的行为都符合预期。这是让我为难的下一步。
这是我的应用程序类:
import React from 'react';
import { AuthPiece } from 'aws-amplify-react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
...
interface AppProps {
authState?: any;
}
export default class App extends AuthPiece<AppProps, {}> {
constructor(props) {
super(props);
this._validAuthStates = ['signedIn'];
}
showComponent() {
return (
<React.Fragment>
<Router>
<Switch>
<Route component={LoggedIn} />
...bunch of routes
</Switch>
</Router>
</React.Fragment>
);
}
}
我的理解是,通过设置this._validAuthStates = ['signedIn'];
,它应该呈现我的应用程序(根据https://aws-amplify.github.io/docs/js/authentication#show-登录后的应用程序(
有人知道我做错了什么吗?它似乎完全忽略了应用程序组件。我应该扩展AuthPiece吗?
干杯
更新更新AppWithAuth.tsx
我似乎已经追踪到了路由器以及它的行为。如果我只是简单地呈现一个简单的react页面,那没关系,否则它似乎会重定向,但不会加载我想要的页面。
@在这里,所以看起来我做得很好,问题在于我设置react组件和无状态组件的方式,以及我如何使用react Router与它们交谈。如果有帮助的话,上面是放大验证器中自定义UI的工作代码。