Meteor LTI Auth,从 Iron Router 服务器路由到客户端的数据?

Meteor LTI Auth, data from Iron Router server route to client?

我在 LTI 工具提供程序上工作,我已经实现了一个 LTI auth package 并且我成功地获得了两个(..一个?)有腿的 OAuth 工作也就是匹配签名,我们都很好重定向,除了一件重要的事情。

我想做的是

现在我无法在重定向到客户端路由后实际确定我的用户。

LTI 消费者指向我的 Iron Router 服务器路由,类似于:

Router.route('/lti', { where: 'server' }).post(function() {
    provider.valid_request(request, function(error, valid) {
        if (valid) {
            this.response.writeHead(302, { Location: '/' });
        } else {
            this.response.writeHead(403);
        }
    });
    return this.response.end();
});

是否有任何软件包可以让我简单地使用它?我可以使用类似 accounts-base 的东西吗?我需要实现自己的逻辑吗?

感谢任何帮助或指导。

干杯。

我通过实施一次性身份验证令牌系统解决了这个问题,该系统由使用 accounts-baseAccounts.registerLoginHandler 方法的自定义登录处理程序处理。

粗略的身份验证流程概述:

LTI 路由(服务器)

  1. 如果通过身份验证,请创建一个新的 account/update 旧的
  2. 将令牌 + 时间戳对象插入集合。
  3. 重定向到身份验证路由,将我们的令牌作为参数传递

授权路由(客户端)

  1. 检查我们的用户是否登录。如果是,重定向到我们的主路由
    • 如果提供了令牌并且它存在,请将其标记为已使用。由于我们无法在服务器路由中检查用户,如果用户有会话,关闭并再次通过 LMS 打开 link,我们需要处理多余的令牌。
  2. 如果我们的用户未登录,请检查令牌。如果存在,则通过 Accounts.callLoginMethod
  3. 将其传递给自定义身份验证
  4. 我们的自定义登录处理程序验证了我们的令牌。如果合法,使用令牌并让用户登录。

我的代码很乱,但是当我重构时,我可能会把它作为一个 Meteor 包开源。