2017-06-22 1 views
0

J'ai un pool d'utilisateurs AWS cognito avec certains utilisateurs et j'essaie d'obtenir un jeton pour un utilisateur dans mon application native. Mais dès que je me réfère à l'aws cognito javascript SDK dans mon application native réagir il se bloque. J'ai réussi à obtenir le jeton dans l'application de réaction. Voici mon code dans l'application de réaction. Je cherche de l'aide pour migrer ce simple morceau de code pour réagir natif.Comment puis-je authentifier un utilisateur sur un pool d'utilisateurs AWS cognito en mode réactif?

import React, { Component } from 'react'; 
 
import logo from './logo.svg'; 
 
import './App.css'; 
 
import { 
 
    AuthenticationDetails, 
 
    CognitoUser, 
 
    CognitoUserPool, 
 
    CognitoUserAttribute 
 
} from 'amazon-cognito-identity-js'; 
 

 
class App extends Component { 
 
    constructor() { 
 
    super(); 
 
    this.state = { token: null }; 
 
    } 
 

 
    getToken = function() { 
 
    var authenticationData = { 
 
     Username : 'testuser', 
 
     Password : 'test123', 
 
    }; 
 
    var authenticationDetails = new AuthenticationDetails(authenticationData); 
 
    var poolData = { 
 
     UserPoolId : 'ap-southeast-2_412', // Your user pool id here 
 
     ClientId : '123' // Your client id here 
 
    }; 
 
    var userPool = new CognitoUserPool(poolData); 
 
    var userData = { 
 
     Username : 'testuser', 
 
     Pool : userPool 
 
    }; 
 
    var cognitoUser = new CognitoUser(userData); 
 
    cognitoUser.authenticateUser(authenticationDetails, { 
 
     onSuccess: function (result) { 
 
      let tok = result.getAccessToken().getJwtToken(); 
 
      console.log('access token + ' + tok); 
 
      this.setState({ token: tok }); 
 
     }, 
 
     onFailure: function(err) { 
 
      console.log(err); 
 
     }, 
 
     newPasswordRequired: function(userAtt, reqAtt) 
 
     { 
 
      console.log(userAtt); 
 
      console.log(reqAtt); 
 
     } 
 
    }); 
 
    } 
 

 
    render() { 
 
    return (
 
     <div className="App"> 
 
     <div className="App-header"> 
 
      <img src={logo} className="App-logo" alt="logo" /> 
 
      <h2>Welcome to React</h2> 
 
     </div> 
 
     <p className="App-intro"> 
 
      To get started, edit <code>src/App.js</code> and save to reload. 
 
     </p> 
 
      <button onClick={ this.getToken.bind(this) }>Get Token</button> 
 
     <p> 
 
      Token: { this.state.token } 
 
     </p> 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 
export default App;

Merci.

+0

J'ai dû utiliser ce module: https://github.com/AirLabsTeam/react-native-aws-cognito-js – MattyK14

Répondre

0

J'ai écrit un billet de blog pour cela il y a un certain temps: https://shellmonger.com/2017/05/15/authenticating-react-native-to-aws-cognito-user-pools/ - il comprend un exemple de code pour ce faire.

+0

J'ai suivi vos instructions dans le blog mais je reçois maintenant un objet d'erreur n'est pas un constructeur à cette ligne dans CognitoUserPool.js this.client = new CognitoIdentityServiceProvider ({apiVersion: '2016-04-19', region}); – Hash

+0

Avez-vous regardé le code dans le référentiel GitHub lié? Je viens de re-vérifier ce code et il fonctionne, donc c'est probablement quelque chose qui a changé dans la bibliothèque sous-jacente ou une petite faute de frappe que vous avez faite lors de l'ajustement de la bibliothèque pour être compatible avec natif. –

0

Il y a une nouvelle bibliothèque de AWS appelé AWS Amplifier pour aider à ceci: https://github.com/aws/aws-amplify

Il contient un module Auth avec des extensions spécifiques React autochtones que vous pouvez installer via NPM:

npm install aws-amplify-react-native 

Vous allez Vous devez lier votre projet: https://github.com/aws/aws-amplify/blob/master/media/quick_start.md#react-native-development

De là, vous pouvez appeler les API directement ou utiliser les composants intégrés pour l'intégration de votre application.