This is an adaptation of Amazon Cognito Identity SDK for JavaScript in combination with AWS SDK for JavaScript for React Native.
This project uses Native Modules to handle intensive math operations on the device using the React Native bridge.
- Add example application
- Add ios compatibility
- Add advanced example
- Add android compatibility
- Add AsyncStorage as StorageHelper
Install in your application directory:
npm install --save react-native-aws-cognito-js
or
yarn add react-native-aws-cognito-js
Link project:
react-native link react-native-aws-cognito-js
Refer to the Amazon Cognito Identity SDK for JavaScript usage examples.
This is a user authentication sample:
//imports
import {
Config,
CognitoIdentityCredentials
} from 'aws-sdk/dist/aws-sdk-react-native';
import {
AuthenticationDetails,
CognitoUser,
CognitoUserPool,
CognitoUserAttribute
} from 'react-native-aws-cognito-js';
const appConfig = {
region: '',
IdentityPoolId: '',
UserPoolId: '',
ClientId: '',
}
//setting config
Config.region = appConfig.region;
//component:
state = {
username: '',
password: '',
}
login = () => {
const { username, password } = this.state;
const authenticationData = {
Username: username,
Password: password,
};
const authenticationDetails = new AuthenticationDetails(authenticationData);
const poolData = {
UserPoolId: appConfig.UserPoolId,
ClientId: appConfig.ClientId
};
const userPool = new CognitoUserPool(poolData);
const userData = {
Username: username,
Pool: userPool
};
const cognitoUser = new CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result) => {
console.log('access token + ' + result.getAccessToken().getJwtToken());
Config.credentials = new CognitoIdentityCredentials({
IdentityPoolId: appConfig.IdentityPoolId,
Logins: {
[`cognito-idp.${appConfig.region}.amazonaws.com/${appConfig.UserPoolId}`]: result.getIdToken().getJwtToken()
}
});
alert('Success');
console.log(Config.credentials);
},
onFailure: (err) => {
alert(err);
},
});
}
//- AWS.js
//create AWS with userPool using dotenv to hold environment variables
import AWS, { CognitoIdentityServiceProvider } from 'aws-sdk/dist/aws-sdk-react-native';
import * as enhancements from 'react-native-aws-cognito-js';
import { AWS_REGION, AWS_POOL_ID, AWS_POOL_CLIENT_ID } from 'react-native-dotenv';
Object.keys(enhancements).forEach(key => (CognitoIdentityServiceProvider[key] = enhancements[key]));
AWS.config.update({ region: AWS_REGION });
export const poolData = {
UserPoolId: AWS_POOL_ID,
ClientId: AWS_POOL_CLIENT_ID,
};
export const userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
export default AWS;
//import AWS and userPool
import AWS, { userPool } from './AWS';
//component:
state = {
username: '',
password: '',
}
login = () => {
const { username, password } = this.state;
const authenticationData = { Username: username, Password: password };
const authenticationDetails = new AWS.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
const userData = { Username: username, Pool: userPool };
const cognitoUser = new AWS.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result) => {
console.log('result', result);
console.log('access token:', result.getAccessToken().getJwtToken());
},
onFailure: (error) => {
Alert.alert(error.code, error.message);
},
});
}