Мутация GraphQL для подписки пользователя не работает с jwt

Я следую этому руководству Робина Веруха

При реализации регистрации пользователей с помощью jwt с GraphQL я не могу предоставить значения с помощью GraphQL Mutation

Server.js

const server = new ApolloServer({
  typeDefs: gql(typeDefs),
  resolvers,
  context: { db },
  secret: process.env.SECRET,
});

models / user.js

export default (sequelize, DataTypes) => {
  const User = sequelize.define('user', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    username: {
      type: DataTypes.STRING,
      unique: true,
      allowNull: false,
     },
    password: {
      type: DataTypes.STRING,
      allowNull: false,
      validate: {
      notempty: true,
     len: [8],
     },
    },
   email: {
      type: DataTypes.STRING,
      unique: true,
      allowNull: false,
      validate:{
      isEmail: true,
    },
  },
  createdAt: {
  },
   createdAt: {
     type: DataTypes.DATE,
     allowNull: true
   },
   updatedAt:  {
     type: DataTypes.DATE,
     allowNull: true
   },
   deleted_at: {
     type: DataTypes.DATE,
     allowNull: true
       }
     },
     {
       freezeTableName: true,
     });
     User.beforeCreate( async user => {
       user.password = await user.generatePasswordHash();
     });
     User.prototype.generatePasswordHash = async function() {
       const saltRounds = 10;
       return await bcrypt.hash(this.password, saltRounds);
     };
     return User;
   }; 

схема

type Mutation {
signUp(username: String!, email: String!, password: String!): Token!

}

  type Token {
    token: String!
  }

преобразователи

signUp: async(
        parent,
        { username, password, email},
        {db, secret },) => {
            const user =  await db.user.create({
              username,
              password,
              email,
            });
           return { token: createToken(user, secret, '30m')};
        },


В настоящее время я застрял с мутацией GraphiQL ниже:


mutation($username: String!, $password: String!, $email: String!){
  signUp(username: $username, password: $password, email: $email){
  u
  }
}

Как видите, когда я набираю u, я должен видеть, что имя пользователя, пароль и адрес электронной почты заполняются автоматически. Или, возможно, мой формат мутации неверен.

Поправьте, пожалуйста, в чем я ошибаюсь.


person 88dax    schedule 15.06.2019    source источник
comment
signUp(.....): Token! - вы должны увидеть token   -  person xadm    schedule 15.06.2019
comment
@xadm Значит, я должен предоставить токен вместе с Мутацией?   -  person 88dax    schedule 15.06.2019
comment
это результат мутации   -  person xadm    schedule 15.06.2019
comment
@xadm Итак, что мне делать?   -  person 88dax    schedule 15.06.2019
comment
'Токен, независимо от того, был ли он получен при регистрации или входе в систему, возвращается клиентскому приложению после успешного входа в GraphQL или мутации signUp. Клиентское приложение должно хранить токен где-нибудь, например, в хранилище сеанса браузера ».   -  person xadm    schedule 15.06.2019
comment
@ 88dax Вы спрашиваете, как изменить вашу схему, чтобы мутация signUp возвращала пользователя вместо (или вместе с) токена? Или вы спрашиваете, как вы можете написать свой запрос, чтобы предоставить значения для трех переменных, которые вы определили?   -  person Daniel Rearden    schedule 15.06.2019
comment
@DanielRearden да, я спрашивал, как создать фрейм мутации на GraphiQL, который включает токен. Теперь у меня все заработало. Спасибо. `mutation {signUp (имя пользователя: test2, пароль: pass1234, электронная почта: [email protected]) {token}}`   -  person 88dax    schedule 15.06.2019


Ответы (1)


person    schedule
comment
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа, подробнее читайте здесь: meta.stackoverflow.com/questions/300837/ - person Eric Leschinski; 16.06.2019