Cle*_*oto 5 amazon-web-services reactjs aws-cognito aws-amplify
我正在尝试为所有与React应用程序上的身份验证相关的页面创建自定义UI。我需要在用户注册时插入带有各种字段的大型表格。
我下面这个教程(https://github.com/richardzcode/Journal-AWS-Amplify-Tutorial),直到实现版本aws-amplify和aws-amplify-react不同。
我试图阅读有关它的文档,但是太肤浅了,我听不懂。https://aws-amplify.github.io/amplify-js/media/authentication_guide#create-your-own-ui
我试图直接在代码中查找并重现在那找到的相同模式,但没有成功。
这是我的Auth组件:
import { Authenticator } from 'aws-amplify-react'
import {
LoginForm,
RegisterForm,
ConfirmRegisterForm,
VerifyContactForm,
ForgotPasswordForm
} from '../components'
export default class Login extends Component {
render () {
return (
<Authenticator hideDefault>
<LoginForm />
<RegisterForm />
<ConfirmRegisterForm />
<VerifyContactForm />
<ForgotPasswordForm />
</Authenticator>
)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的LoginForm:
import React from 'react'
import { Button, Form, Grid, Header, Image, Message, Segment } from 'semantic-ui-react'
import Auth from '@aws-amplify/auth'
import { ConsoleLogger as Logger } from '@aws-amplify/core'
import { AuthPiece } from 'aws-amplify-react'
const logger = new Logger('LoginForm')
class LoginForm extends AuthPiece {
constructor (props) {
super(props)
this.signIn = this.signIn.bind(this)
this._validAuthStates = ['signIn', 'signedOut', 'signedUp']
this.state = {}
console.log('this.props->', JSON.stringify(this.props))
}
signIn () {
const { username, password } = this.inputs
logger.debug(`username: ${username}`)
Auth.signIn(username, password)
.then(user => this.changeState('signedIn', user))
.catch(err => this.error(err))
}
showComponent (theme) {
const { hide = [] } = this.props
if (hide && hide.includes(LoginForm)) {
return null
}
return (
...
)
}
}
export default LoginForm
Run Code Online (Sandbox Code Playgroud)
当我进入登录表单时,authState始终为loading。因此,我无法使它们正常工作。
欢迎任何帮助。
您不需要扩展 AuthPiece,而是需要扩展 SignIn 组件,并确保导入 SignIn 组件。我没有在react中这样做,但我在react-native中这样做过,所以它应该非常相似。
import { SignIn } from "aws-amplify-react";
class CustomSignIn extends SignIn {
...
}
Run Code Online (Sandbox Code Playgroud)
在你的 app.js 中
<Authenticator hideDefault={true}>
<LoginForm override={SignIn}{...this.props} />
....
</Authenticator>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |