我试图通过第三方库这样的一个登录到我的流星网站: 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会通过发送一个'
'回应客户端,应用程序将退出。 –