我写了这段代码,让我使用 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