gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:15:32 25 4
gpt4 key购买 nike

我使用 VueJS 和 Django + django-graphql-jwt (返回 token )。我想使用电子邮件\密码字段进行注册和登录。在服务器上,我想检查提供的电子邮件是否已存在 -> 使用 django-graphql-jwt 的突变 token_auth = graphql_jwt.ObtainJSONWebToken.Field() 返回 token +消息,否则 -> 使用提供的电子邮件和密码创建一个新用户并返回该用户 + 消息。

现在我有:

# schema.py

import graphene
import graphql_jwt

from django.contrib.auth import get_user_model
from graphene_django import DjangoObjectType


class UserType(DjangoObjectType):
class Meta:
model = get_user_model()


class CreateUser(graphene.Mutation):
user = graphene.Field(UserType)

class Arguments:
password = graphene.String(required=True)
email = graphene.String(required=True)

def mutate(self, info, password, email):
user = get_user_model()(
username=email.split('@')[0],
email=email,
)
user.set_password(password)
user.save()

return CreateUser(user=user)

# Want to combine two mutations here
class GetOrCreateUser(graphene.Mutation):
user = graphene.Field(UserType)

class Arguments:
password = graphene.String(required=True)
email = graphene.String(required=True)

def mutate(self, info, password, email):
# Return token
if get_user_model().objects.filter(email=email).exists():
# Just an idea, what I want to get here (to be returned to VueJS)
return {'token': graphql_jwt.ObtainJSONWebToken.Field(), 'msg': 'Token Generated'}

# Create new user
else:
user = CreateUser(???)
return {'user': user, 'msg': 'User is Created'}


class Mutation(graphene.ObjectType):
create_user = CreateUser.Field()
get_or_create_user = GetOrCreateUser.Field()

我尝试了不同的变体,但似乎我不完全理解图形的工作流程或\以及Graphene的作用(其文档不提供信息)。

谁能告诉我,如何在 if\else block 中重用已创建的代码(CreateUser 类和 graphql_jwt.ObtainJSONWebToken.Field())?

最佳答案

django-graphql-auth正是您正在寻找的东西。

它扩展了 django-graphql-jwt 来处理所有用户帐户相关的操作。

这是来自 docs 的注册突变:

mutation {
register(
email:"skywalker@email.com",
username:"skywalker",
password1: "supersecretpassword",
password2:"supersecretpassword"
) {
success,
errors,
token,
refreshToken
}
}

它已经从 django-graphql-jwt 返回 token 和刷新 token 。

您可以使用docs登录:

mutation {
tokenAuth(
# username or email
email: "skywalker@email.com"
password: "supersecretpassword"
) {
success,
errors,
token,
refreshToken,
unarchiving,
user {
id,
username
}
}
}

PS:我是作者

关于django - 如何组合突变在 django-graphql-jwt 中创建或登录用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49268812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com