Ionic 4 如何使用 AWS cognito 会话登录 facebook?



我写了这段代码,让我使用 facebook 登录,但有一个问题,我需要带有 cognito 的会话令牌才能工作,我不知道如何获得它。

facebookSignin(){
// Login with permissions
this.fb.login(['public_profile', 'email'])
.then((loginres: FacebookLoginResponse) => {
// The connection was successful
if (loginres.status === 'connected') {
// Get user infos from the API
this.fb.api('/me?fields=name,gender,birthday,email', [])
.then((profileres: any) => {
let user =  {
username  : profileres.name,
password  : '',
preferred_username : profileres.name,
email            : profileres.email,
phone_number      : profileres.phone_number,
given_name       : profileres.name,
family_name        : profileres.family_name,
locale         : '',
role        : 'sellers',
}
console.log('Uploading info....');
this.amplify.setAuthState({state: 'fbLogin', user});
});
} else { // An error occurred while loging-in
console.log('An error occurred...');
}
})
}

这段代码将我与所有数据一起登录到 facebook,但随后我从这段代码中得到错误,该代码检查了会话:

getSession(authState){
const idTokenPayload = authState.getSignInUserSession().getIdToken().decodePayload();
....
}

getSignInUserSession(( 不是一个函数;

Cognito 有两个不同的资源,一个用户池和一个身份池。这两个的设计似乎有些不直观,尤其是在我们正在考虑的联合身份验证方案的上下文中。为了进一步搅浑水,可以使用联合标识(如Facebook(对用户池进行身份验证,但只能通过网页和本机应用程序而不是离子应用程序来执行此操作。

认知用户池支持联合身份验证;但只能从 AWS 托管页面进行。(在撰写本文时(无法从提供程序令牌直接使用 Cognito 用户池进行身份验证。这是一个非常明显的限制,这意味着除非我们想启动 AWS 托管的 Cognito 页面,否则我们无法在我介绍的场景中使用用户池。

相反,我们需要使用Cognito身份池从Facebook令牌进行身份验证。为此,我们使用客户端 sdk 登录 Facebook,然后使用 Auth.federatedSignIn(( 对 Cognito 用户池进行身份验证

这样做的缺点是我们无法从 Cognito 用户池的功能中受益。

针对 AppSync API 的直接身份验证 将用户信息存储在用户池中 请在下面找到文章。

使用ionic-with-aws-amplify-facebook-authentication

最新更新