AirLabsTeam / react-native-aws-cognito-js

React Native AWS Cognito JS SDK
Other
134 stars 19 forks source link

Facebook Federated ID Credentials #4

Closed spoeck closed 7 years ago

spoeck commented 7 years ago

First of all: Thanks for your great work!

I get a warning if I try to fetch the crendentials via Facebook as identity provider:

        // Add the Facebook access token to the Cognito credentials login map.
        Config.credentials = CognitoIdentityCredentials({
            IdentityPoolId: appConfig.IdentityPoolId,
            Logins: {
                'graph.facebook.com': accessToken // accessToken from FB-SDK
            }
        });

        // Obtain AWS credentials
        Config.credentials.get(e=>console.log(e));

The warning:

Possible Unhandled Promise Rejection (id: 0):
TypeError: this.loadCachedId is not a function
TypeError: this.loadCachedId is not a function
    at CognitoIdentityCredentials (http://localhost:8081/index.android.bundle?platform=android&dev=true&hot=true&minify=false:203985:10)
    at LoginMainScreen._onFBSuccess (/js/screens/login/LoginMainScreen.map?platform=android&runModule=false&entryModuleOnly=true&hot=true:147:103)

Did I something wrong? Is it a small issue? Otherwise it is not very important because it works via aws-sdk-react-native

jmparsons commented 7 years ago

@spoeck Let me know if adding new works:

Config.credentials = new CognitoIdentityCredentials
jmparsons commented 7 years ago

The method should be available on CognitoIdentityCredentials since we load in the AWS JS SDK react native build, but a new instance would need to be created.

https://github.com/aws/aws-sdk-js/blob/master/lib/credentials/cognito_identity_credentials.js#L288

spoeck commented 7 years ago

Thanks for your reply. Adding new let the warning disapear. But when try to obtain the credentials with Config.credentials.get((e)=>{});the Config.credentials and e are null.

jmparsons commented 7 years ago

@spoeck The credentials.get or credentials.refresh don't return a session. At most they return error, on refresh it will pass in error, so you can check if refresh worked.

The session is in cognitoUser.

Check out the docs here:

https://github.com/aws/amazon-cognito-identity-js/blob/master/README.md

And look at example #17.

I'll close this out for now. There's a lot of documentation over there and also some here:

http://docs.aws.amazon.com/cognito/latest/developerguide/facebook.html

There's also the sync once you've logged in successfully and refresh the app. It's under Memory Storage in the readme.

bz123 commented 7 years ago

@spoeck did you manage to make it happen?

vvavepacket commented 7 years ago

@spoeck

I tried your code Config.credentials.get((e)=>{});

but i got the following:

Error: Missing region in config
    at Request.VALIDATE_REGION

I use the same code,, but its throwing the above error:

Config.region = 'us-east-1';
Config.credentials = new CognitoIdentityCredentials({
IdentityPoolId: 'us-east-dsff32r32443242387434sdfsf',
region: 'us-east-1',
Logins: {
            'graph.facebook.com': data.accessToken.toString()
        }
});
// Obtain AWS credentials
Config.credentials.get(function(e){
     // Access AWS resources here.
     console.log(e);
});

Did you set the region somewhere in your code?

spoeck commented 7 years ago

Actually you are right and the region should be set. Anyway your first line Config.region = 'us-east-1' is useless. You can try to add following line and try it before and after creating the credentials.

Config.update({region: 'us-east-1'});

In my case I just use some parts of the cognito-js package and the others of the originally aws-sdk-js. Because for a normal facebook login I don't need special cognito-sdk functionality just for signin and singup cognito users. Following is working in my case for facebook login:

 AWS.config.update({region: appConfig.region});
 AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: appConfig.IdentityPoolId,
            Logins: {
                'graph.facebook.com': data.accessToken
            }
});