【发布时间】: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”方法会被触发并且运行良好。如果我在尝试使用数据库中已存在的用户登录时实现触发验证方法,我可以测试哈希机制,但我还无法实现。谢谢你的评论。