嗨,我正在尝试自定义
jwt graphql Django默认身份验证
我需要使用用户名或电子邮件登录
常规Django,我们定制了身份验证后端。
mutation{
tokenAuth(username:"myemail@email.com"
password:"pass")
{
token
}
}
使用用户名验证
mutation{
tokenAuth(username:"myname"
password:"pass")
{
token
}
}
正常的用户名运行正常。
我如何通过jwt graphql中的用户名或电子邮件对用户进行身份验证
我尝试了此链接
https://django-graphql-jwt.domake.io/en/latest/customizing.html
我对此一无所知...
有人对此有任何想法吗?
答案 0 :(得分:0)
您必须在Model级别上进行更改,而不是在JWT中进行更改,因为JWT只是幕后发生的事情的呈现,因此JWT将紧随其后。
查看下面的链接,也许会对您有所帮助! :)
答案 1 :(得分:0)
免责声明-妈妈的回答应该起作用。在写答案的一半时,我意识到我错了,但我仍然想向您展示我想提出的建议。它显示了JWT TokenAuth突变的作用以及完全利用该突变的方法。
graphql_jwt.decorators.token_auth
以查看两个字段,而不仅仅是一个字段类似的东西(未经测试):
def two_field_token_auth(f):
@wraps(f)
@setup_jwt_cookie
@csrf_rotation
@refresh_expiration
def wrapper(cls, root, info, password, **kwargs):
context = info.context
context._jwt_token_auth = True
username = kwargs.get('username')
email = kwargs.get('email')
user = your_auth_method(
request=context,
username=username,
email=email,
password=password,
)
if user is None:
raise exceptions.JSONWebTokenError(
_('Please enter valid credentials'),
)
if hasattr(context, 'user'):
context.user = user
result = f(cls, root, info, **kwargs)
signals.token_issued.send(sender=cls, request=context, user=user)
return maybe_thenable((context, user, result), on_token_auth_resolve)
return wrapper
class TwoFieldJWTMutation(JSONWebTokenMutation):
@classmethod
@two_field_token_auth
def mutate(cls, root, info, **kwargs):
return cls.resolve(root, info, **kwargs)
的所有必需的导入内容