我有一个基本的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;
我要去哪里错了?
答案 0 :(得分:0)
我从没使用过reactjs,但我注意到了几件事:
signIn
事件。否则,您将无法取回用户信息。您可能必须将redirectSignIn
和redirectSignOut
移出 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()