【问题标题】:scope of Meteor.userId() Anywhere but publish functionMeteor.userId() 的范围除了发布功能之外的任何地方
【发布时间】:2016-09-02 16:41:00
【问题描述】:

在一个客户登录后进行多次试验和错误,Meteor.userId() 可以在任何地方工作。由于应用程序的性质,现在模拟多登录并不容易。

是否期望 Meteor 跟踪哪个用户调用了哪个方法,特别是当该方法调用 public_method_A 而调用 private_method_B 而方法 A、B 属于全局范围内的模块时?

我在一位用户登录的情况下进行了尝试,发现 Meteor.userId() 提供了正确的信息。 doc 说除了发布功能之外的任何地方。
问:我是否需要在任何函数参数中传递 userId 或只在需要时传递用户 Meteor.userId() 并相信 Meteor.userId() 将始终获取调用第一个客户端方法的用户的 id? 谢谢

编辑
如果在服务器代码中需要 userId 的每个地方都使用 Meteor.userId()。与传递参数相比,这种“函数调用”不是很昂贵吗?
如果是这样,在服务器全局范围内创建一个全局范围const userId=Meteor.userId()变量可以吗?即(如果每个客户端都有一个新的服务器实例)

【问题讨论】:

    标签: meteor


    【解决方案1】:

    Meteor 是否应该跟踪哪个用户正在调用哪个方法?

    是的,在客户端发起的调用中确实如此。 Meteor.userId() 在所有情况下都是正确的,即使调用是链式的。

    但是请注意,this.userId 将始终在第一个方法调用中返回正确的值,但不会持续到后续调用,除非它们的上下文绑定到调用者的上下文。

    我是否需要在任何函数参数中传递 userId?

    正如the guide 中所指出的,您不应该将用户ID 传递给方法调用。在最好的情况下它是多余的,在最坏的情况下它是一个主要的安全漏洞。

    如果一个方法调用是由客户端发起的(这很常见),你可以相信Meteor.userId() 是正确的。如果从服务器发起任何函数调用(方法或其他方式)(这不常见),则Meteor.userId() 将不可用。

    【讨论】:

    • 没有传递 userId 作为比函数调用 Meter.userId() 更便宜的参数,特别是当它在服务器端的不同位置多次使用时?
    • 并非如此。 Meteor.userId() 只是从当前连接设置中读取 - 它不必访问数据库,所以这是一个微不足道的操作。
    猜你喜欢
    • 2014-02-14
    • 2013-05-19
    • 2019-08-22
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多