Auth.currentSession说没有当前用户

时间:2019-02-05 17:19:59

标签: javascript reactjs amazon-cognito aws-amplify

我有一个基本的React应用,我尝试使用aws-amplify进行身份验证。 我在cognito中设置了一个用户池。我能够将用户发送到托管的ui。用户可以登录,但是当我尝试获取当前会话时,我收到一条消息,提示no current user

这是我的代码。

import React, { Component } from 'react';
import './App.css';
import Amplify, { Auth } from 'aws-amplify';
import awsmobile from "./aws-exports";

const auth = {
  AppWebDomain: "funnybusty.auth.us-east-2.amazoncognito.com",
  TokenScopesArray: ["phone", "email", "profile", "openid", "aws.cognito.signin.user.admin"],
  RedirectUriSignIn: "http://localhost:3000",
  RedirectUriSignOut: "http://localhost:3000",
  responseType: "token",
  ClientId: "aaaaa",
  UserPoolId: "aaaa",
};

Amplify.configure(awsmobile);
Auth.configure({ oauth: auth });

class App extends Component {

  componentDidMount() {
    Auth.currentSession()
      .then(data => console.log(data))
      .catch(err => console.log(err));
  }

  click = () => {
    const config = Auth.configure().oauth
    const url = 'https://' + config.AppWebDomain + '/login?redirect_uri=' + config.RedirectUriSignIn + '&response_type=' + config.responseType + '&client_id=' + config.ClientId;
    window.location.assign(url);
  }

  render() {
    return (
      <div className="App">
        <button onClick={this.click}>
          Sign in with AWS
          </button>
      </div>
    );
  }
}

export default App;

我要去哪里错了?

3 个答案:

答案 0 :(得分:0)

我从没使用过reactjs,但我注意到了几件事:

  1. 您必须使用 Hub模块来监听signIn事件。否则,您将无法取回用户信息。
  2. oauth配置中,您必须使用 http://localhost:3000/ ({{1} }最后很重要,我很难学到。.)
  3. 您可能必须将redirectSignInredirectSignOut移出 const auth ,因为oauth配置的模式是:

    /

有关更多信息,您可以查看文档中提供的完整示例:https://aws-amplify.github.io/docs/js/authentication#make-it-work-in-your-app

答案 1 :(得分:0)

原来这是我代码中的一个细微错误。这行,

Auth.configure({ oauth: auth });

真的应该是这样的。

Auth.configure({
    Auth: {
      oauth: auth,
    }
  })

文档对此不太清楚,因此我想在此留给以后的Google员工使用。

我看到的是here,但是我的文档也提到了正确的方法here

我不确定这是否是文档中的某种错误,但确实令人困惑。希望这对其他人有帮助。

答案 2 :(得分:0)

我知道这是一个老话题,但是我会为其他有此问题的人解答。

我了解到在Select All中调用Auth.currentSession()并不是一个好习惯。尝试在异步函数中调用它,并将componentDidMount()放在await之前。

示例:

Auth.currentSession()