2016-08-02 91 views
0

我正在嘗試構建Facebook登錄視圖。我遵循指南安裝了SDK,最終能夠登錄到Facebook。但是,登錄後,我無法從回調數據中提取電子郵件,儘管我在React Native中通過電子郵件發送了「權限」。以下是Facebook登錄功能的一部分。React Native Facebook使用電子郵件登錄權限錯誤登錄

我能夠獲得「令牌,令牌到期,用戶ID」,而不是電子郵件,個人資料等

var {FBLogin, FBLoginManager} = require('react-native-facebook-login'); 

... 
     <FBLogin style={{ marginBottom: 10, }} 

     ref={(fbLogin) => { this.fbLogin = fbLogin }} 

     permissions={["email","user_friends","public_profile"]} 

     loginBehavior={FBLoginManager.LoginBehaviors.Native} 

     onLogin={function(data){ 
     console.log("Logged in!"); 
     console.log(data); 
     this.setState({ user : data.credentials }); 
     }.bind(this)} 
     onLogout={function(){ 
     console.log("Logged out."); 
     this.setState({ user : null }); 
     }.bind(this)} 
     onLoginFound={function(data){ 
     console.log("Existing login found."); 
     console.log(data); 
     this.setState({ user : data.credentials }); 

     console.log(this.state.user.userId); 
     console.log(this.state.user.permissions); 

     this.props.navigator.push({ 
      title: 'Results', 
      component: Main 
     }); 
     // 

     }.bind(this)} 
     onLoginNotFound={function(){ 
     console.log("No user logged in."); 
     this.setState({ user : null }); 

     }.bind(this)} 
     onError={function(data){ 
     console.log("ERROR"); 
     console.log(data); 
     }} 
     onCancel={function(){ 
     console.log("User cancelled."); 
     }} 
     onPermissionsMissing={function(data){ 
     console.log("Check permissions!"); 
     console.log(data); 
     }} /> 

請與我分享任何想法。 最好的

回答

0

從最初的電話獲得accessToken之後,您需要使用accessToken撥打另外的電話以獲取電子郵件/附加信息。

下面是部分示例:

<LoginButton 
     style={[styles.loginButton, styles.loginButtonFB]} 
     publishPermissions={["publish_actions"]} 
     onLoginFinished={ 
     (error, result) => { 
      if (error) { 
      alert("login has error: " + result.error); 
      } else if (result.isCancelled) { 
      alert("login is cancelled."); 
      } else { 
      AccessToken.getCurrentAccessToken().then(
       (data) => { 
       this.setState({ 
        loading: true, 
       }) 
       // HERE IS WHAT YOU NEED 
       fetch(`https://graph.facebook.com/me?access_token=${data.accessToken.toString()}`) 
        .then((response) => response.json()) 
        .then((res) => { 
        var socialOptions = { 
         email: res.email, 
         firstName: res.first_name, 
         lastName: res.last_name, 
         token: data.accessToken.toString(), 
         uid: data.userID, 
         loginType: 'facebook', 
        } 
        // ignore this--custom api call sending the data to my own api 
        api.socialRegister(socialOptions) 
         .then((response) => { 
         // working 
         this.handleResponse(response); 

         }) 
         .catch((error) => console.log('error', error)) 
        }) 
        .catch((err) => console.log('error occurred', err.message)); 

       }) // end getCurrentAccessToken 

      } 
      } 
     } 

     onLogoutFinished={() => alert("logout")}/> 

這應該是你所需要的。冰川

+0

嗨!謝謝你的建議。我遵循你的指示!並且它在取回後似乎「res」只有兩個元素(Id和名稱)。我如何調用用戶共享電子郵件和其他數據? –

0

使用readPermissions(或publishPermissions)來指定其他權限,例如'email'。

<LoginButton 
     readPermissions={["public_profile","email"]} 
     publishPermissions={["publish_actions"]} 
     onLoginFinished={...} 
     onLogoutFinished={...} 
/>