我正在使用angularJS /离子应用上的Xcode(ios应用),试图使用Firebase身份验证功能使用Facebook登录。
要做到这一点,我正在使用signInWithRedirect()
和getRedirectResult()
,它似乎正常工作,直到我的代码到达getRedirectResult()
,没有显示错误但在访问接受后facebook正在重定向我在Safari上: localhost:8080 / var / containers / Bundle / Application / ****** / testApp.app/www/index.html#/login ,而不是我的应用登录页面。
我在Developper Facebook网站上设置了facebook应用程序,并将https://testApp-32338.firebaseapp.com/__/auth/handler
设置为OAuth URI字段。
Xcode或某处(.XML或其他)中是否有文件,我必须写一些关于此重定向的内容?如何使用Facebook登录我的ionic / ios应用程序?
这是我的代码:
//********** EDIT 1 CODE **********//
function loginFacebook ()
{
var provider = new firebase.auth.FacebookAuthProvider();
provider.addScope('user_birthday, email, public_profile');
firebase.auth().signInWithRedirect(provider);
// The only console.log() i can see in the console
console.log("0");
firebase.auth().getRedirectResult().then(function(result) {
console.log("1");
if (result.credential) {
console.log("2");
var user = result.user;
// This gives you a Facebook Access Token. You can use it to access the Facebook API.
var token = result.credential.accessToken;
console.log("3");
}
// The signed-in user info.
var user = result.user;
}).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// The email of the user's account used.
var email = error.email;
// The firebase.auth.AuthCredential type that was used.
var credential = error.credential;
});
}
根据Firebase,它似乎是一个已知问题,可能wkwebview
是IOS /离子应用程序上此问题的主要原因。在这个链接中:https://ionicframework.com/docs/wkwebview/离子正在谈论“跨源资源共享”(CORS),我真的不熟悉这个我如何“陷阱”signInWithRedirect()
结果将其更改为要求的网址?这会解决我的问题吗?有人已经能够应对这个问题吗?
尝试使用cordova-facebook4-plugin
的新方法,一切似乎都有效,甚至重定向部分到我的应用程序并收集数据(名称,生日,令牌......等)。未知部分是如何将我的结果链接到firebase身份验证提供程序?在Firebase文档(https://firebase.google.com/docs/auth/web/facebook-login)中,方法是使用signInWithRedirect()
(请参阅我的第一次编辑)或signInWithPopUp()
(不在手机应用中使用),有一个signInWithCustomToken()
,但当我放入Facebook给定令牌时,它不起作用。不幸的是,我也尝试了universal-links
方法,结果相同。你们是怎么做到这一点的?是否有人实现了cordova-facebook4-plugin
和Firebase之间的联系?
//********** EDIT 2 CODE **********//
function loginFacebook()
{
var fbLoginSuccess = function (userData) {
console.log("UserInfo: " + JSON.stringify(userData));
facebookConnectPlugin.getAccessToken(function(token) {
console.log("Token: " + token);
// What to do with this Token to link to Firebase ???
});
}
facebookConnectPlugin.login(["public_profile", "user_birthday"], fbLoginSuccess,
function (error) {
console.error(error)
}
);
}
最后它是有效的,非常感谢@mootrichard!这是我最后的工作代码:
//********** EDIT 3 CODE FINAL **********//
// SIGNIN WITH FACEBOOK4
function loginFacebook()
{
var provider = new firebase.auth.FacebookAuthProvider();
var fbLoginSuccess = function (userData) {
console.log("UserInfo: " + JSON.stringify(userData));
facebookConnectPlugin.getAccessToken(function(token) {
console.log("Token: " + token);
connectProvider(token);
});
}
facebookConnectPlugin.login(["public_profile", "user_birthday"], fbLoginSuccess,
function (error) {
console.error(error)
}
);
//CONNECT FACEBOOK TO THE FIREBASE PROVIDER
function connectProvider(access_token)
{
// Build Firebase credential with the Facebook access token.
var credential = firebase.auth.FacebookAuthProvider.credential(access_token);
// Sign in with credential from the Google user.
firebase.auth().signInWithCredential(credential).then(function(result) {
var firstName = result.displayName.split(' ').slice(0, -1).join(' ');
var lastName = result.displayName.split(' ').slice(-1).join(' ');
console.log("The firstName is : ", JSON.stringify(firstName));
console.log("The lastName is : ", JSON.stringify(lastName));
$state.go("anOtherPage");
}).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// The email of the user's account used.
var email = error.email;
// The firebase.auth.AuthCredential type that was used.
var credential = error.credential;
});
}
答案 0 :(得分:1)
我想你想看一下Firebase的高级指南。由于您已拥有令牌,因此您只需使用以下命令创建Facebook凭据:
$.ajax('showads.js')
.fail(function(d){
debugger //do some stuff here
});
您可以在https://firebase.google.com/docs/auth/web/facebook-login#advanced-authenticate-with-firebase-in-nodejs找到他们的示例。