Аутентификация при регистрации в GraphQl не работает: Ошибка: - signupUser: null - PullRequest
0 голосов
/ 08 ноября 2018

Я пытался реализовать функцию SignUp с GraphQl, но я столкнулся с этой ошибкой, когда при выполнении мутации в graphql он возвращает ноль. Аутентификация при регистрации в 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") };
          }
    }

};

СЕКРЕТ: ключ предоставляется в файле variables.env

1 Ответ

0 голосов
/ 02 июня 2019

Не беспокойтесь о запуске ваших кодов с помощью асинхронной функции. Заменить на эти коды

во-первых, импортируйте модель вашей базы данных в файл распознавателя

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") };
          }
    }
...