javascript - 通过第三方库登录 Meteor

标签 javascript meteor

我正在尝试通过第三方库登录我的 meteor 网站,如下所示: 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: "123456789012345"
    }, 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() 返回未定义。但是,如果我在浏览器中进行页面刷新,则效果很好,并且模板将以登录用户的身份呈现。

有人知道如何修复客户端上的“未定义”吗?

PS。在服务器端,用户集合看起来不错。 meteor token 和其他一切都在那里。

最佳答案

已解决。我必须添加: this.setUserId(userId.id); userId = Accounts.updateOrCreateUserFromExternalService('facebook', serviceData, options); 之后在server.js

关于javascript - 通过第三方库登录 Meteor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15713124/

相关文章:

javascript - grunt sass 任务由于 bourbon 包而产生错误

javascript - 动态 js 表不工作

javascript - 检查某个项目是否已在数组中的正确 jquery 语法是什么?这是一个简单的例子

javascript - Meteor Cordova iOS 视频元素未加载捕获的视频

css - 无法在我的 Meteor 应用程序上呈现样式表(MIME 错误)

api - 如何在 `meteor` 服务器中提供 api?

javascript - 当 Meteor 中的变量发生变化时,如何制作响应式 UI?

javascript - 为什么枚举属性/函数时 key.length 不准确

javascript - 如何使用 JQuery 将样式适本地应用于正常运行的 get 请求?

jquery - 停止在 url 中显示输入 - Meteor