GraphQl中的注册身份验证不起作用:错误:-signupUser:null



我试图用GraphQl实现SignUp功能,但我遇到了这个错误,在GraphQl上执行突变时返回null。GraphQl中的注册身份验证不起作用:错误:-signupUser:null这是我键入的突变,但它显示signupUser:null

在这里查看Graphiql的图像schema.js

exports.typeDefs = `

type Story {
_id: ID
name: String!
category: String!
description: String!
instructions: String!
createdDate: String
likes: Int
username: String
}

type User {
_id: ID
username: String! @unique
password: String!
email: String!
joinDate: String
favorites: [Story]
}
type Query {
allStories: [Story]
}
type Token {
token: String!
}
type Mutation {
addStory(name: String!, description: String!, category: String!, instructions: String!, username: String): Story
signinUser(username: String!, password: String!): Token
signupUser(username: String!, email: String!, password: String!): Token
}

`;
resolvers.js

const jwt = require('jsonwebtoken');
const bcrypt = require("bcrypt");
const createToken = (user, secret, expiresIn) => {
const { username, email } = user;
return jwt.sign({ username, email }, secret, { expiresIn });
};
exports.resolvers= {
Query: {
allStories: async (root, args, { Story })=> {
const allStory = await Story.find();
return allStory;
}
},
Mutation: {
addStory: async (root, {name, description, category, instructions, username }, { Story }) => {
const newStory = await new Story({
name,
description,
category,
username,
instructions
}).save();
return newStory;
},

signinUser: async (root, { username, password }, { User }) => {
const user = await User.findOne({ username });
if (!user) {
throw new Error("User not found");
}
const isValidPassword = await bcrypt.compare(password, user.password);
if (!isValidPassword) {
throw new Error("Invalid password");
}
return { token: createToken(user, process.env.SECRET, "1hr") };
},

signupUser: async (root, { username, email, password }, { User }) => {
const user = await User.findOne({ username: username});
if (user) {
throw new Error("User already exists");
}
const newUser = await new User({
username,
email,
password
}).save();
return { token: createToken(newUser, process.env.SECRET, "1hr") };
}
}
};

SECRET:密钥是在variables.env文件上提供的

不要麻烦用异步函数运行代码。替换为这些代码

首先,将数据库模型导入解析程序文件

const User = require("./Model/User");
Mutation: {
addStory: (root, {name, description, category, instructions, username }) => {
const newStory = new Story({
name,
description,
category,
username,
instructions
}).save();
return newStory;
},

signinUser: (root, { username, password }) => {
const user = User.findOne({ username });
if (!user) {
throw new Error("User not found");
}
const isValidPassword = await bcrypt.compare(password, user.password);
if (!isValidPassword) {
throw new Error("Invalid password");
}
return { token: createToken(user, process.env.SECRET, "1hr") };
},

signupUser: (root, { username, email, password }) => {
const user = User.findOne({ username: username});
if (user) {
throw new Error("User already exists");
}
const newUser = new User({
username,
email,
password
}).save();
return { token: createToken(newUser, process.env.SECRET, "1hr") };
}
}

最新更新