如果您有管理员权限,是否可以在 Meteor 中设置其他用户的密码?
Is it possible to set another user's password in Meteor if you have admin privileges?
我现在正在尝试在 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 is undefined 错误。
我添加了 accounts-password 和 accounts-base 包,但它仍然显示未定义的错误,所以我怀疑是否不再支持 Accounts.setPassword。
请帮我解决这个问题!
Accounts.setPassword
是 Meteor
中的 服务器专用 函数。如果您在浏览器控制台中收到错误,那是因为您的 updateUserPassword
方法是在 lib/
文件夹或类似的地方声明的,并且可以被 客户端 和服务器端。
通常,希望在 lib/
文件夹中声明 Meteor.methods
以便利用 Meteor 的 Latency Compensation 技术(也称为方法模拟)。
在你的情况下,这是不可取的,因为 Accounts.setPassword
是 server-only.
解决方案一:
您可以使用Meteor.isClient
和Meteor.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
}
}
});
方案二:
您可以在服务器端声明 Meteor.methods
,方法是将文件放在仅限服务器的 server/
文件夹中,或者将整个 Meteor.methods
声明放在 if(Meteor.isServer) { ... }
检查。
当不需要延迟补偿时应该使用它。
我现在正在尝试在 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 is undefined 错误。
我添加了 accounts-password 和 accounts-base 包,但它仍然显示未定义的错误,所以我怀疑是否不再支持 Accounts.setPassword。
请帮我解决这个问题!
Accounts.setPassword
是 Meteor
中的 服务器专用 函数。如果您在浏览器控制台中收到错误,那是因为您的 updateUserPassword
方法是在 lib/
文件夹或类似的地方声明的,并且可以被 客户端 和服务器端。
通常,希望在 lib/
文件夹中声明 Meteor.methods
以便利用 Meteor 的 Latency Compensation 技术(也称为方法模拟)。
在你的情况下,这是不可取的,因为 Accounts.setPassword
是 server-only.
解决方案一:
您可以使用Meteor.isClient
和Meteor.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 } } });
方案二:
您可以在服务器端声明 Meteor.methods
,方法是将文件放在仅限服务器的 server/
文件夹中,或者将整个 Meteor.methods
声明放在 if(Meteor.isServer) { ... }
检查。
当不需要延迟补偿时应该使用它。