为React自定义AWS Amplify身份验证UI

Cle*_*oto 5 amazon-web-services reactjs aws-cognito aws-amplify

我正在尝试为所有与React应用程序上的身份验证相关的页面创建自定义UI。我需要在用户注册时插入带有各种字段的大型表格。

我下面这个教程(https://github.com/richardzcode/Journal-AWS-Amplify-Tutorial),直到实现版本aws-amplifyaws-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。因此,我无法使它们正常工作。

欢迎任何帮助。

Car*_*ons 0

您不需要扩展 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)