2016-01-11 4 views
0

У меня есть приложение Meteor, работающее на модуле, и мне нужно установить (не reset) пароль пользователя. Существует метод Accounts.setPassword(), но он может быть выполнен только из кода сервера.Как установить пароль пользовательского документа для приложения Meteor, работающего на модуле?

Однако я не знаю, что-то вроде meteor shell для модуля.

Как я могу запустить код сервера?

ответ

1

source code of Meteor говорит нам, как именно пароли хэшируются:

// Use bcrypt to hash the password for storage in the database. 
// `password` can be a string (in which case it will be run through 
// SHA256 before bcrypt) or an object with properties `digest` and 
// `algorithm` (in which case we bcrypt `password.digest`). 
// 
var hashPassword = function (password) { 
    password = getPasswordString(password); 
    return bcryptHash(password, Accounts._bcryptRounds); 
}; 

А также:

Accounts._bcryptRounds = 10; 

Таким образом, вы можете просто создать новый хэш от первого применения SHA256, а затем 10-раундовый Bcrypt в строке необработанного пароля.

Если у вас есть только один или два пароля для изменения и хотите обновить их вручную, вот некоторые интернет-инструменты, чтобы сделать это:

Online SHA-256 calculator

Online bcrypt calculator

После создана новый хэш, просто обновите его с помощью консоли Mongo:

db.users.update({"emails.address": "[email protected]"}, {$set: {"services.password.bcrypt": "$2a$10$u/4JV2MrAKb8Jk9yRHDIL.yGn5SQOInFunvUwEnDv5uJgMkWNe08K"}}); 
+0

Это довольно крутое решение. Спасибо @Jimmi – BassT

0

В итоге я добавил Meteor method, который делает то, что мне нужно.

Однако мне не очень нравится идея этого и думаю, что должен быть лучший способ.