【问题标题】:How to integrate account-js package to already existed mongo db?如何将account-js包集成到已经存在的mongodb?
【发布时间】:2021-03-17 03:13:38
【问题描述】:

我有一个流星应用,想迁移非流星应用。我发现 account-js 与流星账户系统兼容。当我创建新用户时,一切正常,但如果我想使用已经存在的用户帐户登录,js 方法不起作用,我每次都会收到 unauth 消息。如何使用 account-js 登录已经存在的用户?

   
const accountsPassword = new AccountsPassword({
  verifyPassword: (plainPassword, storedPassword) => {
    const hashedPassword = crypto.Hash('sha256').update(plainPassword).digest('hex')

    console.log('*****Verify Password*****')
    return bcrypt.compareSync(plainPassword, storedPassword)
  }
})

const accountsServer = new AccountsServer(
  {
    db: accountsMongo
  },
  {
    password: accountsPassword
  }
)

const accountsGraphQL = AccountsModule.forRoot({ accountsServer })


const schema = makeExecutableSchema({
  typeDefs: mergeTypeDefs([typeDefs, accountsGraphQL.typeDefs]),
  resolvers: mergeResolvers([resolvers, accountsGraphQL.resolvers]),
  schemaDirectives: {
    ...accountsGraphQL.schemaDirectives
  }
})

const schemaMiddleware = applyMiddleware(schema, permissions)

【问题讨论】:

  • accounts-js 如何散列它的密码?您在代码中显示它的方式,使用十六进制编码的 sha256 哈希?如果是这样,那就行不通了。如果您查看由流星的帐户密码创建的哈希密码,它们甚至不是十六进制的,例如,"services" : { "password" : {"bcrypt" : $2b$10$L6HP23tUgsYuQ0LVwPXw1eODKLyDPvvxXo1IjZEx6.PBxfOeQHqS."}..
  • 您可能是对的,但实际问题是当我使用数据库中已经存在的用户登录时,“verifyPassword”方法不会被任何东西触发。如果我创建一个新用户,“verifyPassword”方法会被触发并且运行良好。如果我在尝试使用数据库中已存在的用户登录时实现触发验证方法,我可以测试哈希机制,但我还无法实现。谢谢你的评论。

标签: meteor meteor-accounts


【解决方案1】:

accounts-js 使用与 Meteor 身份验证系统完全不同的身份验证机制。 account-js 使用 JWT 令牌,而 Meteor 使用唯一哈希,因此它不是交叉兼容的。我写了一篇关于它的博客文章,你可以阅读here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    相关资源
    最近更新 更多