如何修复 TypeError:在使用 bcryptjs 对 GraphQL 突变进行哈希密码期间无法读取未定义的属性“哈希”?
Posted
技术标签:
【中文标题】如何修复 TypeError:在使用 bcryptjs 对 GraphQL 突变进行哈希密码期间无法读取未定义的属性“哈希”?【英文标题】:How to fix TypeError: Cannot read property 'hash' of undefined during hashing password for GraphQL mutation with bcryptjs? 【发布时间】:2020-01-23 02:14:07 【问题描述】:我对 Node/GraphQL/MongoDB/Moogose 比较陌生。 我正在尝试创建一个突变来使用 bcryptjs 而不是纯文本来加密用户的密码。但是,我遇到了这个错误: TypeError:无法读取未定义的属性“哈希”
我来自 Python 背景,我在理解异步编程的过程中遇到了一些困难 这是我的 schema.js 的代码块
const RootMutation = new GraphQLObjectType(
name: 'RootMutationType',
fields:
createUser:
type: UserType,
args:
email: type: new GraphQLNonNull(GraphQLString) ,
password: type: new GraphQLNonNull(GraphQLString) ,
,
resolve(parents, args)
User.findOne( email: args.email )
.then(user =>
if(user)
throw new Error('This email has already been used!');
return bcrypt.hash(args.password, 12); // Error at this line
)
.then(hashedPassword =>
let user = new User(
email: args.email,
password: hashedPassword,
);
return user.save();
)
.catch(err =>
throw err;
);
我试过了,但我得到了错误无法读取未定义的属性“genSalt”:
createUser:
type: UserType,
args:
email: type: new GraphQLNonNull(GraphQLString) ,
password: type: new GraphQLNonNull(GraphQLString) ,
,
resolve(parents, args)
User.findOne( email: args.email )
.then(user =>
if(user)
throw new Error('This email has already been used!');
bcrypt.genSalt(10, function(err, salt)
bcrypt.hash(args.password, salt, function(err, hash)
let user = new User(
email: args.email,
password: hash,
);
return user.save();
);
);
);
更新: 更改为以下内容后,我现在可以在我的 MongoDB 中创建用户: 原来是因为我在使用:
const bcrypt = require('bcryptjs');
而不是
const bcrypt = require('bcryptjs'); // this is working
有人能解释一下有什么区别吗?我正在使用 ES6。
另外,我的 graphql mutation 似乎没有返回正确的查询。 变异命令
mutation
createUser(email: "test3@test.com", password: "testpassword")
email
password
结果:
"data":
"createUser": null
【问题讨论】:
【参考方案1】:const bcrypt = require('bcryptjs');
表示在 bcryptjs 内部抓取一个名为 bcrypt 的属性,该属性不可用。
你只做解构
const isEmail = require("validator");
当 isEmail 是验证器中的属性之一时。
【讨论】:
【参考方案2】:Cannot read property 'hash' of undefined
为我修复后
像这样声明 bcrypt:
const bcrypt = require("bcrypt");
而不是这个
const bcrypt = require('bcryptjs');
【讨论】:
【参考方案3】:对于 es6:
从'bcrypt'导入bcrypt;
【讨论】:
以上是关于如何修复 TypeError:在使用 bcryptjs 对 GraphQL 突变进行哈希密码期间无法读取未定义的属性“哈希”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NetlifyCMS 构建中修复“TypeError:childImageSharp 未定义”?
如何修复“TypeError:fsevents 不是构造函数”反应错误
如何修复 TypeError:在使用 bcryptjs 对 GraphQL 突变进行哈希密码期间无法读取未定义的属性“哈希”?