gpt4 book ai didi

meteor - 如果您拥有管理员权限,是否可以在 Meteor 中设置其他用户的密码?

转载 作者:行者123 更新时间:2023-12-02 07:23:37 25 4
gpt4 key购买 nike

我现在正在尝试在 Meteor 管理页面中设置另一个用户的密码。

这是我的代码。

Meteor.methods({
updateUserPassword: function(userId, password) {
var loggedInUser = Meteor.user()

if (!loggedInUser ||
!(Roles.userIsInRole(loggedInUser, ['admin'], 'default_group')) || (loggedInUser._id == userId) ) {
throw new Meteor.Error(403, "Access denied")
}

return Accounts.setPassword(userId, password);
}
});

但是当我运行此代码时,我收到 Accounts.setPassword 未定义错误。

我添加了accounts-password和accounts-base包,但它仍然显示未定义的错误,所以我怀疑是否不再支持Accounts.setPassword。

请帮我解决这个问题!

最佳答案

Accounts.setPasswordMeteor 中的仅服务器函数。如果您在浏览器控制台中收到错误,那是因为您的 updateUserPassword 方法是在 lib/ 文件夹或类似位置声明的,并且可以由 客户端访问端和服务器端。

通常,需要在 lib/ 文件夹中声明 Meteor.methods,以便利用 Meteor 的 Latency Compensation技术(也称为方法模拟)。

在您的情况下,这是不可取的,因为 Accounts.setPassword仅服务器

<小时/>

解决方案 1:

您可以使用Meteor.isClientMeteor.isServer来确定在何处运行哪些代码。 (您还可以使用this.isSimulation)。

Meteor.methods({  updateUserPassword: function(userId, password) {    var loggedInUser = Meteor.user()    if (!loggedInUser ||        !(Roles.userIsInRole(loggedInUser, ['admin'], 'default_group')) || (loggedInUser._id == userId) ) {      throw new Meteor.Error(403, "Access denied")    }    if(Meteor.isServer) {        return Accounts.setPassword(userId, password);    } else if(Meteor.isClient) {        // do something else    }  }});
<小时/>

解决方案 2:

您可以在服务器端声明 Meteor.methods,方法是将文件放置在仅用于服务器的 server/ 文件夹中,或者将整个 if(Meteor.isServer) { ... } 检查中的 >Meteor.methods 声明。

当不需要延迟补偿时应使用此选项。

关于meteor - 如果您拥有管理员权限,是否可以在 Meteor 中设置其他用户的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368457/

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