用户注册的 GraphQL 突变不适用于 jwt

Posted

技术标签:

【中文标题】用户注册的 GraphQL 突变不适用于 jwt【英文标题】:GraphQL Mutation for User SignUp not working with jwt 【发布时间】:2019-10-29 16:36:07 【问题描述】:

我正在关注这个 tutorial by Robin Wieruch 在使用 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 卡住了:

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

如您所见,当我输入 u 时,我应该会看到用户名、密码和电子邮件自动填充。或者可能是我的变异格式不正确。

请指正,我错了。

【问题讨论】:

signUp(.....): Token! - 你应该看到token @xadm 的意思是,我是否应该连同 Mutation 一起提供令牌? 这是一个变异结果 @xadm 那么,我该怎么办呢? '令牌,无论是在注册还是登录时获得的,都会在成功的 GraphQL 登录或注册突变后返回给客户端应用程序。客户端应用程序必须将令牌存储在浏览器会话存储之类的地方。' 【参考方案1】:
mutation($email: String!, $username: String!, $password: String!)
    signUp(email: $email, username: $username, password: $password) 
        token 
    

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值,请在此处阅读更多信息:meta.***.com/questions/300837/…

以上是关于用户注册的 GraphQL 突变不适用于 jwt的主要内容,如果未能解决你的问题,请参考以下文章

Graphql 突变查询不适用于 express-graphql

如何结合突变在 django-graphql-jwt 中创建或登录用户?

GraphQL - JWT - 更改 verifyToken 突变的有效负载 - django

Django GraphQL JWT:tokenAuth 突变返回“str 对象没有属性解码”

使用来自突变解析器的 GraphQL Yoga 响应自定义 HTTP 代码

从 Promise 返回数据到 GraphQL