1

Verwenden Sie reactive native.So überprüfen Sie, ob ein Benutzer bei Facebook angemeldet ist

In meinem JSX-Code warf ich die Behandlung für das onLoginFound-Ereignis ein und sagte, etwas zu drucken, wenn ein Login gefunden wurde. Das druckt NIE, was seltsam ist.

Ich habe dann diese Linie dachte ich könnte die getCurrentAccessToken() Funktion überprüfen verwenden, wenn der Benutzer angemeldet ist.

alert(AccessToken.getCurrentAccessToken() != null) 

Dies liefert true die ganze Zeit, obwohl auch wenn niemand es in so angemeldet ist scheint nicht zu funktionieren.

Gibt es etwas offensichtlich, das ich vermisse? Ich kann nicht glauben, dass die Überprüfung, ob ein Benutzer angemeldet ist, für mich ein Problem sein könnte.

Mein Code unten:

import React, { Component } from 'react'; 
import { 
    AppRegistry, 
    StyleSheet, 
    Text, 
    View 
} from 'react-native'; 

const FBSDK = require('react-native-fbsdk'); 
const { 
    LoginButton, 
    AccessToken, 
    GraphRequest, 
    GraphRequestManager, 
} = FBSDK; 

export default class FBReact extends Component { 
    render() { 
    return (
     <View style={styles.container}> 
     <Text style={styles.welcome}> 
      Welcome to React Native! 
     </Text> 
     <Text style={styles.instructions}> 
      To get started, edit index.ios.js 
     </Text> 
     <Text style={styles.instructions}> 
      Press Cmd+R to reload,{'\n'} 
      Cmd+D or shake for dev menu 
     </Text> 
     <LoginButton 
      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) => { 
        alert(data.accessToken.toString()); 
        let token = data.accessToken.toString(); 
        } 
       ) 
       } 
      } 
      } 
      onLogoutFinished={() => alert("logout.")} 
      onLoginFound={function(data){ 
      console.log("Existing login found."); 
      console.log(data); 
      alert("log in found"); 
      _this.setState({ user : data.credentials }); 
      }}/> 
     </View> 
    ); 
    } 
} 

const styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    justifyContent: 'center', 
    alignItems: 'center', 
    backgroundColor: '#F5FCFF', 
    }, 
    welcome: { 
    fontSize: 20, 
    textAlign: 'center', 
    margin: 10, 
    }, 
    instructions: { 
    textAlign: 'center', 
    color: '#333333', 
    marginBottom: 5, 
    }, 
}); 

AppRegistry.registerComponent('FBReact',() => FBReact); 
alert(AccessToken.getCurrentAccessToken() != null) 
+0

Was bekommen Sie, wenn Sie 'console.log tun (AccessToken.getCurrentAccessToken())'? Möglicherweise sind Sie wirklich eingeloggt und Sie müssen sich ausloggen, bevor der Zugriff auf Null erfolgt. In meinem Code habe ich etwas nach erfolgreicher Facebook-Anmeldung in AsyncStorage gespeichert. Überprüfen Sie später diesen gespeicherten Wert. – cjmling

+0

AccessToken.getCurrentAccessToken() scheint nur ein Objekt zurückzugeben, unabhängig davon, ob ich angemeldet bin oder nicht. Nicht sicher, ob es relevant ist, aber wenn ich die App schließe und sie wieder öffne, wechselt die Login-Schaltfläche zurück zu "Login with Facebook", was bedeutet, dass ich automatisch ausgeloggt werde oder etwas, wenn ich die App schließe. Nur zur Referenz: Wie verwenden Sie ein in AsyncStorage gespeichertes Token, um Dinge mit Facebook zu erledigen? –

+0

Grundsätzlich mit FacebookLogin brauche ich nur die Email und einige andere Profildaten. Also habe ich den LoginManager https://github.com/facebook/react-native-fbsdk#request-additional-permissions-with-login-manager benutzt. Sobald ich diese Benutzerdaten erhalte. Speichern Sie diese E-Mails dann entweder mit AsyncStorage oder anderen relevanten Daten zu Referenzzwecken oder senden Sie sie an einen beliebigen Server, den Sie für die Backend-Authentifizierung verwenden. – cjmling

Antwort

0

AccessToken.getCurrentAccessToken() ist ein Versprechen.

Sie müssen warten, um zu beheben, um den Inhalt zu erhalten. Wie folgt:

AccessToken.getCurrentAccessToken() 
    .then((tokenInfo) => { 
    console.log(tokenInfo); 
    }); 

Hier ist der Quellcode dieser Methode Referenz:

/** 
* Getter for the access token that is current for the application. 
*/ 
static getCurrentAccessToken(): Promise<?FBAccessToken> { 
    return new Promise((resolve, reject) => { 
    AccessToken.getCurrentAccessToken((tokenMap) => { 
     if (tokenMap) { 
     resolve(new FBAccessToken(tokenMap)); 
     } else { 
     resolve(null); 
     } 
    }); 
    }); 
Verwandte Themen