在远程和本地连接上使用一个用户

时间:2015-10-16 17:14:23

标签: javascript meteor

我想连接到远程服务器并将其用于登录。这并不是特别难。

Remote = DDP.connect('http://somesite.com');
Accounts.connection = Remote;
Meteor.users = new Mongo.Collection('users', Remote);

但是,当我在本地代码上调用meteor方法时(有多个服务器,但只有一个登录),它无法识别用户。

Meteor.methods({
  'start': function () {
    if (!this.userId) {
      // ...
    } else {
      throw new Meteor.Error(401, 'Unauthorized');
    }
  }
});

尽管已登录,但这始终会导致错误。

如何将本地用户设置为与远程用户相同的用户?

1 个答案:

答案 0 :(得分:1)

让我们重命名以下内容:

  • Remote => Login Server
  • local => Default Server这是您调用方法
  • 的地方

我认为您可以登录Default Server更好地服务,然后将登录尝试转发给Login Server
这样,当您使用Default Server上的Login Server时,您将在Meteor.Methods上登录(如果Default Server确认凭据有效)。

Accounts.validateLoginAttempt允许您在LoginAttempt的回调中运行任意代码,允许您将验证从Default Server传递到Login Server

if (Meteor.isServer) {
  Accounts.validateLoginAttempt(function(attempt) {
    //psuedocode block
    var res = LoginServer_Login(attempt.methodArguements)
    if (res === true) return true;  // Login Success
    else              return false; // Login Failed
  });
}

我不确定实施LoginServer_Login功能的最佳方法,但我尝试首先使用HTTP.post与Login Server进行通信(并建议使用restivus登录服务器,它将为您提供开箱即用的身份验证路由。)

我刚看到这个包:admithub:shared-auth 它需要两个流星应用程序之间的共享数据库。 除此之外,您可能需要研究完整的SSO解决方案。