我試圖通過第三方庫這樣的一個登錄到我的流星網站: https://gist.github.com/gabrielhpugliese/4188927流星登錄
在我server.js我有:
Meteor.methods({
facebook_login: function (fbUser, accessToken) {
var options, serviceData, userId;
serviceData = {
id: fbUser.id,
accessToken: accessToken,
email: fbUser.email
};
options = {
profile: {
name: fbUser.name
}
};
userId = Accounts.updateOrCreateUserFromExternalService('facebook', serviceData, options);
return userId;
}, ......
在我的client.js我有:
facebookLogin: function() {
if (Meteor.user())
return;
if (!Session.equals("deviceready", true))
return;
if (!Session.equals("meteorLoggingIn", false))
return;
// Do not run if plugin not available
if (typeof window.plugins === 'undefined')
return;
if (typeof window.plugins.facebookConnect === 'undefined')
return;
// After device ready, create a local alias
var facebookConnect = window.plugins.facebookConnect;
console.log('Begin activity');
Session.equals("meteorLoggingIn", true);
Accounts._setLoggingIn(true);
facebookConnect.login({
permissions: ["email", "user_about_me"],
appId: "123456789"
}, function (result) {
console.log("FacebookConnect.login:" + JSON.stringify(result));
// Check for cancellation/error
if (result.cancelled || result.error) {
console.log("FacebookConnect.login:failedWithError:" + result.message);
Accounts._setLoggingIn(false);
Session.equals("meteorLoggingIn", false);
return;
}
var access_token = result.accessToken;
Meteor.call('facebook_login', result, access_token, function (error, user) {
Accounts._setLoggingIn(false);
Session.equals("meteorLoggingIn", false);
if (!error) {
var id = Accounts._makeClientLoggedIn(user.id, user.token);
console.log("FacebookConnect.login: Account activated " + JSON.stringify(Meteor.user()));
} else {
// Accounts._makeClientLoggedOut();
}
});
});
}, // login
facebookLogout: function() {
Meteor.logout();
// var facebookConnect = window.plugins.facebookConnect;
// facebookConnect.logout();
},
第三方庫(在我的情況下Facebook的Android SDK)工作正常。我的問題是「var id = Accounts._makeClientLoggedIn(user.id,user.token);」 Meteor.user()返回Undefined。但是,如果我在瀏覽器中進行頁面刷新,則工作正常,並且模板呈現爲登錄用戶。
任何人都知道如何解決客戶端上的'未定義'?
PS。在服務器端,用戶集合看起來很好。流星令牌和其他一切都在那裏。
Akshat謝謝你的回答。然而,在這個特定的項目中,我使用Apache Cordova應用程序來查看我的流星網站。這樣我可以訪問流星網站的設備功能(例如加速度計,相機等)。目前,我不能使用accounts-facebook(不起作用),因爲我在這裏描述的問題:https://github.com/meteor/meteor/issues/872 –
我也使用科爾多瓦類似的東西,儘管不完全相同,爲什麼不將新窗口改爲'window.location.href =',並在對話認證URL中使用'display = touch',以便在手機上運行良好?我特意爲了降低fb-js-sdk的複雜性而在最近的android設備上非常出色 – Akshat
我明白你爲什麼要避免使用fb-js-sdk,但我沒有使用它。我使用java Android SDK(包裝在cordova應用程序中),我只從流星中加載JavaScript接口。通過這種方式,我爲本地操作調用登錄並將結果返回給javascript(非常穩定)。我不確定你的window.location.href而不是彈出的想法,因爲我相信oath_server會通過發送一個'
'迴應客戶端,應用程序將退出。 –