流星:通过DDP登录并在单独的流星应用程序中检索当前用户对象



首先介绍一下背景:

我正在开发一个与主应用程序连接的独立移动应用程序。连接已成功启动,我可以通过订阅检索所有集合:

Remote = DDP.connect('http://localhost:3000/');
Meteor.users = new Meteor.Collection('users', {
    connection: Remote
});
Remote.subscribe('users', true);

现在我想确保用户可以通过第二个应用程序的界面登录。在安装了accounts-password和meteor-ddp-login包之后,我应该可以使用客户端中的下一段代码与主应用程序进行身份验证。

var Remote = DDP.connect('http://localhost:3000/');
DDP.loginWithPassword(Remote, {
    username: username
}, password, function(error) {
    if (!error) {
        console.log(username + " is logged in!");
    } else {
        console.log(error);
    }
});

嗯,到目前为止还不错。没有错误出现,控制台记录一条成功消息。现在问题来了:

如何检索刚刚登录的用户的user对象

我在主应用程序中设置了几个发布函数,但用户数据在第二个应用程序中对客户端不可用(其他集合工作良好,但Meteor.user()未定义)。

还有:我如何认证登录Facebook/Google/Twitter的用户

遇到这个,我最近也有类似的需求。下面的代码可以在Meteor 1.2.0.2版本中工作

<>之前if (Meteor.isClient) {Meteor.startup(函数(){//似乎没有这个,在页面刷新,它不工作。//注释:理想情况下,如果核心处理了account的不同连接的用例,则不需要这样做//破解block 1***********var token = Accounts._storedLoginToken();如果(令牌){流星。loginWithToken(令牌,函数(err) {//这将抛出错误,如果我们注销如果(err)console.log(错);其他的console.log("loginWithToken");});//loginWithToken}//破解block 1***********});//启动功能var connection = DDP.connect("http://localhost:3060");账户。连接=连接;//注释:理想情况下,如果核心处理了account的不同连接的用例,则不需要这样做//破解block 2***********账户。users = new Meteor。收集("用户",{连接:连接});//破解block 2***********跟踪器。自动运行(function () {//没有直接影响功能的代码。只是为了测试console.log (Meteor.user ());Accounts.connection.call("用户",函数(呃,结果){如果(err)console.log(错);如果(结果){console.log(结果);如果结果。_id === Meteor.user()._id){console.log("服务器和客户端显示同一用户已登录");} else {console.log("服务器和客户端显示不同的用户");}}})});Template.register.events ({'submit #register-form': function(e, t) {e.preventDefault ();Var email = t.find('#account-email').value, password = t.find('#account-password').value;账户。createUser({电子邮件:邮件,密码:密码},函数(呃,结果){If (err) {//通知用户创建帐户失败console.log(错);} else {//成功。已创建帐号和用户//登录成功。console.log("注册用户");Console.log ('response is '+ result);console.log (Meteor.user ());}});//createUser返回错误;}});//注册Template.login.events ({'submit #login-form': function(e,t){e.preventDefault ();Var email = t.find('#login-email').value, password = t.find('#login-password').value;流星。loginWithPassword(email, password, function(err){如果(err)console.log(错);其他的//用户已经登录。Console.log('已成功登录');});返回错误;}});//登录Template.statusloggedin.events ({'click #logout': function(e,t){e.preventDefault ();Meteor.logout ();返回错误;}});//注销}

最新更新