【问题标题】:how to customize django jwt graphql authentication如何自定义 django jwt graphql 身份验证
【发布时间】:2020-06-26 09:53:46
【问题描述】:

您好,我正在尝试自定义

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

我对此一无所知...

有人知道吗?

【问题讨论】:

    标签: django graphql jwt


    【解决方案1】:

    您必须在模型级别而不是在 JWT 中进行更改,JWT 将随之而来,因为 JWT 只是对幕后发生的事情的呈现。

    看看下面的链接,也许对你有帮助! :)

    Multiple USERNAME_FIELD in django user model

    【讨论】:

    【解决方案2】:

    免责声明 - 妈妈的回答应该有效。写到一半时我意识到我错了,但我仍然想向您展示我想要建议的内容。它展示了 JWT TokenAuth 变异的作用以及完全利用它的方法。

    1. 按照妈妈的回答建议更改内置 Django 身份验证
    2. 重写 graphql_jwt.decorators.token_auth 以查看两个字段,而不仅仅是一个字段
    3. 为 TokenMutation 编写你自己的类,在它的 mutate 函数上使用这个装饰器

    类似的东西(未经测试):

    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)
    

    您可以找到所有必要的导入 here 和 here

    【讨论】:

      猜你喜欢
      • 2019-11-20
      • 2021-04-04
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      相关资源
      最近更新 更多