【问题标题】:React Native - Firebase Facebook AuthReact Native - Firebase Facebook 身份验证
【发布时间】:2016-12-25 13:25:49
【问题描述】:

有没有人能够成功地将 Firebase Facebook Auth 集成到 React Native 中。我已经为此苦苦挣扎了几个小时,但真的不知道该怎么做。

这是我目前所拥有的:

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

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

import Button from './src/components/button';

//I had this populated with the correct stuff, just removed it for the stack overflow purpose
const firebase1 = require("firebase");
const firebaseConfig = {
  apiKey: "stuff",
  authDomain: "stuff",
  databaseURL: "stuff",
  storageBucket: "stuff",
};
const firebase = firebase1.initializeApp(firebaseConfig);

console.log("V2.5")
const auth = firebase.auth();
const provider = firebase.auth.FacebookAuthProvider;

class pack extends Component {
   render() {
    return (
      <View>        
        <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())
                    console.log("lets try to sign in with provider")

                           firebase.auth().signInWithCredential(credential).catch(function(error) {
                            // Handle Errors here.
                                var errorCode = error.code;
                                var errorMessage = error.message;
                                console.log(errorMessage)
                                // ...
                              });




                  }
                )
              }
            }
          }
          onLogoutFinished={() => alert("logout.")}/>
      </View>
    );
  }

现在它说我定义的提供者变量是undefined。我用const provider = firebase.auth.FacebookAuthProvider; 把它放在顶部

有没有更好的方法来解决这个问题?我希望我并不孤单.. 在谷歌上搜索它似乎并没有太多其他人正在尝试这样做.. 只是试图让 firebase 上的 facebook auth 与 React Native 一起工作

【问题讨论】:

    标签: facebook firebase react-native firebase-authentication


    【解决方案1】:
    var credential = firebase.auth.FacebookAuthProvider.credential(data.accesToken)
    

    【讨论】:

    • 嗯,我定义错了吗,得到错误:未定义不是对象(评估'firebase.auth.FacebookAuthProvider.credential')
    • 你遇到过这样的事情吗?
    【解决方案2】:

    我已在Firebase 上使用Facebook 成功登录。

    这是我的代码。

    var credential = firebase.auth.FacebookAuthProvider.credential(data.accessToken.toString());
    firebase.auth().signInWithCredential(credential).then(function(user) {
      console.log("Sign In Success", user);
    }, function(error) {
      console.log("Sign In Error", error);
    });
    

    【讨论】:

      【解决方案3】:

      聚会迟到了,但是.. 我们的文档here 中有一个完整的示例。

      使用“react-native-firebase”库的示例:

      import { AccessToken, LoginManager } from 'react-native-fbsdk';
      
      // ... somewhere in your login screen component
      LoginManager
        .logInWithReadPermissions(['public_profile', 'email'])
        .then((result) => {
          if (result.isCancelled) {
            return Promise.resolve('cancelled');
          }
          console.log(`Login success with permissions: ${result.grantedPermissions.toString()}`);
          // get the access token
          return AccessToken.getCurrentAccessToken();
        })
        .then(data => {
          // create a new firebase credential with the token
          const credential = firebase.auth.FacebookAuthProvider.credential(data.accessToken);
      
          // login with credential
          return firebase.auth().signInWithCredential(credential);
        })
        .then((currentUser) => {
          if (currentUser === 'cancelled') {
            console.log('Login cancelled');
          } else {
            // now signed in
            console.warn(JSON.stringify(currentUser.toJSON()));
          }
        })
        .catch((error) => {
          console.log(`Login fail with error: ${error}`);
        });

      【讨论】:

      • 这个sn-p已经被别人和我自己在github repo上成功使用了。至少在投反对票之前说出错误是什么,因为这很可能是用户错误。
      • 我“不小心”点击了投票,忘记了大声笑,但代码现在可以正常工作了,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 2017-07-12
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多