2016-08-02 134 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={...} 
/>