2016-04-29 62 views
0

我面临问题得到电子邮件和喜欢的用户在facebook登录后使用firebase进入我的离子应用程序。 获取Facebook显示名称和用户中的其他信息后,也没有被重定向到仪表板页面,而是登录页面得到刷新。虽然我读了不同的帖子在stackoverflow和其他sorces,但我卡住了。请帮我解决这两个问题。 ** 1)**如何得到电子邮件和用户 ** 2)**喜欢如何重定向用户到仪表板很快就被Facebook核实后.. 下面是代码Facebook登录使用在离子应用的firebase

****Controller:**** 

$scope.loginFaceBook = function() { 
     ///alert('fb Login firebase...'); 
     var existingAuthData = Auth.$getAuth(); 
     console.log("existingAuthData : ",existingAuthData); 
     //console.log("existingAuthData Email : ",existingAuthData.thirdPartyUserData.email); 
     Auth.$authWithOAuthRedirect("facebook").then(function(authData) { 
      alert('done 1'); 
     // User successfully logged in 
      console.log(authData); 
      $location.path('app/Dash'); 
    }, { 
    remember: "sessionOnly", 
    scope: "email,user_likes" 
}).catch(function(error) { 
     if (error.code === "TRANSPORT_UNAVAILABLE") { 
     Auth.$authWithOAuthPopup("facebook").then(function(authData) { 
      // User successfully logged in. We can log to the console 
      // since we’re using a popup here 
      alert('done 2'); 
      console.log(authData); 
     $location.path('app/Dash'); 
     }, { 
    remember: "sessionOnly", 
    scope: "email,user_likes" 
}); 
     } else { 
     // Another error occurred 
     console.log(error); 
      alert('err'); 
     } 
    }); 

Auth.$onAuth(function(authData) { 
    if (authData === null) { 
    console.log("Not logged in yet"); 
    } else { 
    console.log("Logged in as", authData.uid); 
     console.log("Details",authData); 
     console.log("Name:",authData.facebook.displayName); 
     alert("Name:",authData.facebook.displayName); 
     console.log("gender:",authData.facebook.cachedUserProfile.gender); 
     console.log(" Email : ",authData.facebook.email); 

     $location.path('app/Dash'); 
    } 
    $scope.authData = authData; // This will display the user's name in our view 
}); 

    }; 

**App.js** 

// Ionic Starter App 


// 'starter.controllers' is found in controllers.js 
angular.module('starter', ['ionic', 'starter.controllers', 'ngCordovaOauth','firebase','ngFileUpload']) 

.run(function($ionicPlatform) { 
    $ionicPlatform.ready(function() { 
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
    // for form inputs) 
    if (window.cordova && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
     cordova.plugins.Keyboard.disableScroll(true); 

    } 
    if (window.StatusBar) { 
     // org.apache.cordova.statusbar required 
     StatusBar.styleDefault(); 
    } 
    }); 
}) 

.factory("Auth", function($firebaseAuth) { 
    var usersRef = new Firebase("https//*********.firebase***.****/****"); 
    return $firebaseAuth(usersRef); 
}) 

回答

5

请进行不断在你的应用程序在任何地方使用它像

.constant('facebookUrl', 'https://rjrestaurantapp.firebaseio.com'); 

然后在控制器注入这个常数“facebookUrl &‘$状态’如下图所示

.controller('loginCtrl', function($scope,facebookUrl,$state){ 

然后你只需给你想要的Facebook身份验证后重定向状态的名字..

var ref = new Firebase(facebookUrl); 
$scope.fbLogin = function() { 
    ref.authWithOAuthPopup("facebook", function(error, authData) { 
    if (error) { 
     console.log("Login Failed!", error); 
    } else { 
     console.log("Authenticated successfully with payload:", authData); 
     $state.go('restaurant'); 
    } 
    }) 
}}) 

和电子邮件,并喜欢你必须首先确保这些信息在对象所示的authData全成认证后..

请仔细阅读本文档仔细https://www.firebase.com/docs/web/guide/login/facebook.html

+0

我添加了一个工厂代码,.factory( “验证” 功能($ firebaseAuth){VAR = usersRef新火力地堡(“HTTPS//*********.firebase***.****/****“); return $ firebaseAuth(usersRef); })我认为常量在某种程度上是相同的方法,但仍然authData不contain有关用户电子邮件的信息... –

+0

@AftabKhan如果您成功使用Facebook与Firebase进行身份验证,所以authData必须包含属性facebook.id,facebook。 displayName和facebook.email等... 请确保您已成功登录或使用Facebook进行身份验证? 请认证控制台authData,它将帮助您找到所需的属性.. –

+0

所有其他信息,如facebook.displayName可用,除了facebook.email –