gpt4 book ai didi

javascript - Meteor.user() 替代方案

转载 作者:行者123 更新时间:2023-11-29 22:03:11 26 4
gpt4 key购买 nike

我正在编写一个需要显示一些用户信息的应用程序。因为 Meteor.user() 不是立即可用的,所以我用 handlerbar helper 包装了每个用户信息

Handlebars.registerHelper('isLoggingIn', function() {
return Meteor.loggingIn();
})

这对我有用,直到我需要为每个用户/用户 Angular 色创建管理页面和自定义内容。等待 Meteor.user() 可用或在等待 Angular 色加载时首先显示一般信息是我想避免的选项。

然后我尝试了另一种方法,并使用新的 Collection 发布了 currentUser。

Meteor.publish('currentUser', function() {
var sub = this;
var handle = Meteor.users.find({_id: this.userId}).observe({
added: function (user) {
sub.added('currentUser', user._id, user);
}
});
sub.ready();
sub.onStop(function() { handle.stop(); });
});

CurrentUser = new Meteor.Collection('currentUser');

通过这种方式,我可以使用 CurrentUser.findOne() 访问已登录的用户,并且它与其他集契约(Contract)时可用。

我担心的是这种替代方案不如常见的 Meteor.user() 安全且没有问题,我想知道我的方法是否正确以及是否有更好的方法来获得相同的结果(用户详细信息立即可用)而无需重新发明轮子。

最佳答案

请注意,您可以使用 {{loggingIn}}{{#if loggingIn}}.. 而无需编写自己的助手。

发布使用自定义发布功能登录的用户的选项增加了不必要的复杂性。

当涉及到安全性时,您必须假设它是否来自客户端,在任何情况下都是不可信的。这意味着您仅在他们登录到该用户时发布该 Angular 色的相关数据等。

一旦用户登录,服务器上的数据就会立即可用,您所要做的就是只发布该用户 Angular 色的数据。在客户端上,可能需要一些时间来适应这一点,这就是为什么您可以在订阅完成之前使用占位符。

更好的选择可能是使用一个助手来检查订阅何时完成并显示“加载消息”。或者使用路由器,例如 iron-router (github.com/EventedMind/iron-router),它可以让您等待特定页面的订阅完成。

这样你就可以按照你想要的方式使用 Meteor.user(){{#currentUser}} 和 Angular 色。

要记住的一件事是,如果你想检查用户是否登录,不要使用:

if(Meteor.user())

而是

if(Meteor.user() && Meteor.user().profile && Meteor.user().profile.name)

(不过,您必须在个人资料中插入一个 name 属性)。登录时,用户会获得越来越多的数据。我注意到如果您等待个人资料字段,那么用户就“准备好了”。最初 profile 字段似乎是空的(仍在登录),但如果您使用 if(Meteor.user())

它会返回 true

关于javascript - Meteor.user() 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com