Пароль не определен в Graphql & Node - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь создать функцию входа в систему с GraphQL и узлом.Я получил регистрацию на работу, но при запросе функции входа в систему он говорит, что пароль не определен.

AuthType

const AuthType = new GraphQLObjectType({
    name: 'Auth',
    fields: () => ({
        userId: {type: GraphQLString},
        username: {type: GraphQLString},
        email: {type: GraphQLString},
    })
});

Это содержит данные, которые я ожидаю обратно.

const RootQuery = new GraphQLObectType({
  login: {
    type: AuthType,
    args: {
      password: {
        type: GraphQLString
      },
      email: {
        type: GraphQLString
      }
    },
    resolve(parent, args) {
      return User.findOne({
          email: args.email
        })
        .then(user => {
          const isEqual = new Promise(bcrypt.compare(password, args.password));
          if (!isEqual) {
            throw new Error('Password is incorrect!');
          }

        }).then(result => {
          return {
            userId: result.id,
            username: result.username
          };
        }).catch(err => {
          throw err
        });
    }
  }
});

Это логика для проверки данных, спасибо.

schema.js

 const graphql = require('graphql');
    const bcrypt = require('bcryptjs');
    const jwt = require('jsonwebtoken');

    const {GraphQLObjectType, 
       GraphQLInt,
       GraphQLString,
       GraphQLSchema, 
       GraphQLID, 
       GraphQLList, 
       GraphQLNonNull } = graphql;

    const User = require('../models/user');
    const Event = require('../models/event');

Тип User определяет, какие данные от пользователя мы хотели бы сохранить.

const UserType = new GraphQLObjectType({
    name: 'User',
    fields: () => ({
        id: {type: GraphQLID},
        firstname: {type: GraphQLString},
        lastname: {type: GraphQLString},
        username: {type: GraphQLString},
        email: {type: GraphQLString},
        password: {type: GraphQLString},
        location: {type: GraphQLString},
        about: {type: GraphQLString},
        gender: {type: GraphQLString},
        yob: {type: GraphQLString},      //Year of Birth;
        events: {
            type: new GraphQLList(EventType),
            resolve(parent, args){
            //  return _.filter(events, {userId: parent.id});
                return Event.find({creator: parent.id});
            }
        }


    })
});

Функция входа в систему по-прежнему не распознает ввод пароля.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вместо использования аргументов в функции разрешения я использовал {email, пароль}.

        const RootQuery = new GraphQLObectType({
              login: {
                    type: AuthType,
                    args: {
                           password: {
                                 type: GraphQLString
                            },
                          email: {
                                 type: GraphQLString
                                      }
                         },
              resolve(parent, {email, password }) {
                   return User.findOne({
                        email: email
                   })
                    .then(user => {
                     const isEqual = bcrypt. compare(
                            password, user.password));
                      if (!isEqual) {
                           throw new Error('Password is incorrect!');
                       }

                    }).then(result => {
            return {
              userId: result.id,
             username: result.username
            };
          }).catch(err => {
             throw err
          });
       }
0 голосов
/ 07 февраля 2019

Вы не определяете поле пароля в своем AuthType, я думаю, вы должны сделать что-то вроде:

const AuthType = new GraphQLObjectType({
    name: 'Auth',
    fields: () => ({
        userId: {type: GraphQLString},
        username: {type: GraphQLString},
        email: {type: GraphQLString},
        password: {type: GraphQLString},
    })
});

Кроме того, у вас есть орфографическая ошибка в этой строке:

const RootQuery = new GraphQLObectType({

Это должно быть GraphQLObjectType вместо GraphQLObectType

Кроме того, в этой строке:

const isEqual = new Promise(bcrypt.compare(password, args.password));

Возможно, вы получаете ошибку там, так какpassword не определено в коде.Вы, вероятно, хотите сделать user.password?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...