无法从 Amazon Cognito 用户池获取用户会话
Cannot get user session from Amazon Cognito User Pools
我正在使用 Amazon 的 Cognito 用户池来启动 SAML SSO 身份验证。我正在使用 aws-amplify
,它是一个 JavaScript 库,用于在前端使用云服务和 ReactJS 进行应用程序开发。尝试使用 currentSession()
函数似乎存在一些问题。使用包的 Auth 模块的 Auth.siginIn()
函数时,我的会话似乎没有保存会话。我已经测试并成功登录了我在用户池中设置的当前测试用户。我之所以要使用 Auth.currentSession()
函数是为了在我的应用程序中验证每个视图的会话。您可以在下面看到,在用户验证登录后,我将他们发送到我的仪表板视图,然后在组件安装后尝试验证会话,但它 returns 一个没有找到用户的错误。下面是我使用的代码。我查看了 aws-amplify 在其网站上的文档,但我似乎无法查明问题所在。
Note: Redux is being used to store the response from setUserData and setAuthToken (session
response after signing in)
Login.js
handleSubmit = (event) => {
event.preventDefault();
Auth.signIn(this.state.sso, this.state.password)
.then((res) => {
this.props.authUser(true)
this.props.setUserData(res.username)
this.props.setAuthToken(res.Session)
})
.then(() => {
this.props.history.push("/Dashboard")
})
//catches err
.catch((e) => {
console.log(e);
alert(e.message)
this.props.authUser(false)
})
}
用户登录后,应将用户推送到仪表板。在组件生命周期中调用 componentDidMount()
后,我想检查当前会话以查看是否仍在会话中。
Dashboard.js
componentDidMount(){
debugger;
console.log(Auth);
Auth.currentSession().then((res) => {
console.log(res);
}).catch((e) => {
alert(e)
})
this.props.toggleError(false);
this.props.toggleNotify()
}
SAML 的身份验证流程与在 UserPool 中创建的用户不同。 Auth.signIn()
仅用于验证已在用户池中创建的用户。 (AWS Amplify Documentation)
要启动 SAML 身份验证流程,请执行以下步骤:
- 将您的 SAML 提供商设置为您的用户池中的联合身份
- 将用户定向到由您的 AWS 用户池托管的 SAML SSO 页面。
- 用户将通过 SAML SSO 提供商进行身份验证,您的 UserPool 将向您的应用程序发送 JWT
- 使用 AWS-Amplify
Auth.federatedSignIn()
方法接收 AWS IAM 凭证(将由 AWS-Amlify 管理
本指南是第 1-3 步的重要资源:Amazon Cognito User Pools supports federation with SAML。
第 4 步:
Auth.federatedSignIn(
// Initiate federated sign-in with your User Pool
'cognito-idp.us-west-2.amazonaws.com/us-west-2_XXXXXXXXX',
{
// the JWT token parsed from the response url
token: #id_token
},
// (optional) a user object (a simple dictionary created from the #access_token)
user
).then(() => {
// ...
});
我正在使用 Amazon 的 Cognito 用户池来启动 SAML SSO 身份验证。我正在使用 aws-amplify
,它是一个 JavaScript 库,用于在前端使用云服务和 ReactJS 进行应用程序开发。尝试使用 currentSession()
函数似乎存在一些问题。使用包的 Auth 模块的 Auth.siginIn()
函数时,我的会话似乎没有保存会话。我已经测试并成功登录了我在用户池中设置的当前测试用户。我之所以要使用 Auth.currentSession()
函数是为了在我的应用程序中验证每个视图的会话。您可以在下面看到,在用户验证登录后,我将他们发送到我的仪表板视图,然后在组件安装后尝试验证会话,但它 returns 一个没有找到用户的错误。下面是我使用的代码。我查看了 aws-amplify 在其网站上的文档,但我似乎无法查明问题所在。
Note: Redux is being used to store the response from setUserData and setAuthToken (session response after signing in)
Login.js
handleSubmit = (event) => {
event.preventDefault();
Auth.signIn(this.state.sso, this.state.password)
.then((res) => {
this.props.authUser(true)
this.props.setUserData(res.username)
this.props.setAuthToken(res.Session)
})
.then(() => {
this.props.history.push("/Dashboard")
})
//catches err
.catch((e) => {
console.log(e);
alert(e.message)
this.props.authUser(false)
})
}
用户登录后,应将用户推送到仪表板。在组件生命周期中调用 componentDidMount()
后,我想检查当前会话以查看是否仍在会话中。
Dashboard.js
componentDidMount(){
debugger;
console.log(Auth);
Auth.currentSession().then((res) => {
console.log(res);
}).catch((e) => {
alert(e)
})
this.props.toggleError(false);
this.props.toggleNotify()
}
SAML 的身份验证流程与在 UserPool 中创建的用户不同。 Auth.signIn()
仅用于验证已在用户池中创建的用户。 (AWS Amplify Documentation)
要启动 SAML 身份验证流程,请执行以下步骤:
- 将您的 SAML 提供商设置为您的用户池中的联合身份
- 将用户定向到由您的 AWS 用户池托管的 SAML SSO 页面。
- 用户将通过 SAML SSO 提供商进行身份验证,您的 UserPool 将向您的应用程序发送 JWT
- 使用 AWS-Amplify
Auth.federatedSignIn()
方法接收 AWS IAM 凭证(将由 AWS-Amlify 管理
本指南是第 1-3 步的重要资源:Amazon Cognito User Pools supports federation with SAML。
第 4 步:
Auth.federatedSignIn(
// Initiate federated sign-in with your User Pool
'cognito-idp.us-west-2.amazonaws.com/us-west-2_XXXXXXXXX',
{
// the JWT token parsed from the response url
token: #id_token
},
// (optional) a user object (a simple dictionary created from the #access_token)
user
).then(() => {
// ...
});