Войти Мутация для Graphql не находит пользователя - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь создать сервис аутентификации с помощью GraphQl и Mongodb.Я создал свою регистрационную мутацию, которая принимает адрес электронной почты и пароль.Я использую bcrypt для хеширования и разархивирования паролей.

Это не проблема импорта или проблема mongodb, это graphql.

const UserType = new GraphQLObjectType({
    name: 'User',
    fields: () => ({
        id: {type: GraphQLID},
        username: {type: GraphQLString},
        email: {type: GraphQLString},
        password: {type: GraphQLString},
        institution: {
            type: InstitutionType,
            resolve(parent, args){
                return Institution.findById(parent.institutionId)
            }
        }
    })
});
login:{
                type:GraphQLString,
                args:{
                    email: {type: GraphQLString},
                    password: {type: GraphQLString}
                },
                resolve: async (parent, { email, password }, { models, SECRET }) => {
                    const user = await models.User.findOne({ where: { email } });
                    if (!user) {
                      throw new Error('No user with that email');
                    }

                    const valid = await bcrypt.compare(password, user.password);
                    if (!valid) {
                      throw new Error('Incorrect password');
                    }

                    const token = jwt.sign(
                      {
                        user: _.pick(user, ['id', 'username']),
                      },
                      SECRET,
                      {
                        expiresIn: '1y',
                      },
                    );

                    return token;
                  },
                },
              }});

Он должен вернуть токен jwt, который может позжеиспользоваться для аутентификации.Сначала я запустил это в graphiql в своем браузере:

mutation{
  login(email: "ammarthayani@gmail.com", password:"password"){
  }
}

, и он выдал мне это в консоли: «Синтаксическая ошибка: ожидаемое имя найдено

Затем я попытался:

mutation{
  login(email: "ammarthayani@gmail.com", password:"password"){
    username
  }
}

, который дал мне: Поле \ "логин \" не должно иметь выбор, так как тип \ "Строка \" не имеет подполей.

1 Ответ

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

Тип поля login для вашего типа Mutation: GraphQLString, что является скаляром.Поскольку скаляры являются листовыми узлами, у них нет набора выбора (то есть других «дочерних» полей). Из спецификации :

Если selectionType является скаляром или перечислением:

  • Набор подвыборов этого выбора должен быть пустым

Если selectionType является интерфейсом, объединением или объектом

  • Набор подвыборов этого выбора не должен быть пустым

В фигурных скобках используютсяуказывают набор выбора, поэтому их не следует использовать, если тип возвращаемого значения для поля - скаляр или перечисление.Ваш запрос должен быть простым:

mutation {
  login(email: "ammarthayani@gmail.com", password:"password")
}
...