Meteor:REST集合API和身份验证

Meteor:REST集合API和身份验证,rest,authentication,meteor,Rest,Authentication,Meteor,在需要通过休息来展示我的流星收藏的一部分时,我偶然发现了一个 尽管这确实使得通过REST公开流星收集成为可能,但它并没有考虑任何安全性。有没有办法将Collection API与0.5.2中引入的Meteor auth系统集成?是的,有点。使用REST meteorite包,您可以声明您的集合,然后使用集合上的规则,但需要注意几点(注意:这是需要更多工作的伪代码!): 但是虽然我认为RESTful方法在将遗留应用程序集成到Meteor环境中会很有用,但我强烈建议研究新项目的集成方法 正如您在上面

在需要通过休息来展示我的流星收藏的一部分时,我偶然发现了一个


尽管这确实使得通过REST公开流星收集成为可能,但它并没有考虑任何安全性。有没有办法将Collection API与
0.5.2
中引入的Meteor auth系统集成?

是的,有点。使用REST meteorite包,您可以声明您的集合,然后使用集合上的规则,但需要注意几点(注意:这是需要更多工作的伪代码!):

但是虽然我认为RESTful方法在将遗留应用程序集成到Meteor环境中会很有用,但我强烈建议研究新项目的集成方法


正如您在上面看到的,这些规则不公开GET回调,可能是因为预期GET是在服务器公开的发布中定义的。DDP客户机是在较低的级别上连接的,用于订阅这些发布,因此在此上下文中的GET将比RESTful方法更细粒度。

是的,有点像。使用REST meteorite包,您可以声明您的集合,然后使用集合上的规则,但需要注意几点(注意:这是需要更多工作的伪代码!):

但是虽然我认为RESTful方法在将遗留应用程序集成到Meteor环境中会很有用,但我强烈建议研究新项目的集成方法


正如您在上面看到的,这些规则不公开GET回调,可能是因为预期GET是在服务器公开的发布中定义的。DDP客户端在较低级别上连接以订阅这些发布,因此此上下文中的GET将比RESTful方法更加精细。

对于现在遇到此问题的任何人,允许您在集合上生成REST端点,并在这些端点上配置用户身份验证和角色权限。默认身份验证使用Meteor的内置登录令牌机制对
Meteor.user
进行身份验证,并在已验证的端点中提供对
this.user
this.userId
的访问。如果默认值对您来说太多或不够,您还可以提供自定义身份验证方法。下面是一个简单的例子(希望您能阅读CoffeeScript):


对于现在遇到此问题的任何人,允许您在集合上生成REST端点,并在这些端点上配置用户身份验证和角色权限。默认身份验证使用Meteor的内置登录令牌机制对
Meteor.user
进行身份验证,并在已验证的端点中提供对
this.user
this.userId
的访问。如果默认值对您来说太多或不够,您还可以提供自定义身份验证方法。下面是一个简单的例子(希望您能阅读CoffeeScript):


似乎正确的方法是等待Meteor团队的官方REST端点支持;(似乎正确的方法是等待Meteor团队的官方REST端点支持(
Players = new Meteor.Collection("players");

//a collection of associated userids and auth token headers
APIUsers = new Meteor.Collection("apiusers"); 

Players.allow({
    insert: function (userId, doc) {
        //invoking this from a RESTful context means the userId is NOT 
        //available, so you'll need to do three things things: 
        //    (1) a way to get the current http request's X-Auth-Token header
        //    (2) a collection to look up the user(s) associated with 
        //        that token
        //    (3) and an owner field on the Players collection to join back 
        //        to the found userids.
        return (_.indexOf(APIUsers.findOne(
                    {XAuthToken: __CURRENT_X_AUTH_TOKEN__}).users
                 , doc.owner) > -1;
    },
    update: function (userId, docs, fields, modifier) {
       /* similar logic */
    },
    remove: function (userId, docs) {
       /* similar logic */
    },
    fetch: ['owner']
});
# Generates: GET, POST on /api/users and GET, DELETE on /api/users/:id for
# Meteor.users collection
Restivus.addCollection Meteor.users
  excludedEndpoints: ['deleteAll', 'put']
  routeOptions:
    authRequired: true
  endpoints:
    post:
      authRequired: false
    delete:
      roleRequired: 'admin'