检查流星中非 sha bcrypts 的密码

Checking password against non sha bcrypts in meteor

我正在将一个应用程序从 parse 迁移到 meteor。在解析中,用户的密码存储为 bcrypt(password),而 meteor 存储为 bcrypt(sha256(password))。如何将旧的 bcrypt 列表插入流星,以便老用户可以无缝登录?

我建议您查看以下内容,了解 accounts-password defines a password login method, then define you own. Method signature 如何实现 registerLoginHandler


在服务器中(建议在服务器启动时完成):

import bcrypt from 'bcrypt';

import { Accounts } from 'meteor/accounts-base';
import { Meteor } from 'meteor/meteor';

Accounts.registerLoginHandler('parsePassword', function (options) {
  // Validate options
  /* TODO Fill in yourself */

  // Find the user to login
  /* TODO Fill in yourself */

  const result = {
    userId: user._id,
  };

  // Prepare the bcrypt method
  const bcryptCompare = Meteor.wrapAsync(bcrypt.compare);

  if (! bcryptCompare(options.password, hashedPassword)) {
    result.error = new Meteor.Error(403, 'Incorrect password');
  }

  return result;
});

然后你会使用这种登录方法,就像在客户端上一样:

import { Meteor } from 'meteor/meteor';

Meteor.loginWithParsePassword({ user: /* TODO Define the query for finding your user */, password: passwordInput }, function () { console.log(arguments); });

确保在您的 package.json

中列出了 bcrypt 模块

我将示例的一部分留空只是因为我不知道提问者如何从 Parse 导入他们的用户以及导入数据的数据库结构是什么样的。所以我将把这部分代码留作提问者的练习。