簡體   English   中英

如何自定義 django jwt graphql 身份驗證

[英]how to customize django jwt graphql authentication

嗨,我正在嘗試自定義

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

我對此沒有任何想法...

有沒有人對此有任何想法?

您必須在模型級別而不是在 JWT 中進行更改,JWT 將隨之而來,因為 JWT 只是幕后發生的事情的演示。

看看下面的鏈接,也許對你有幫助! :)

Django 用戶模型中的多個 USERNAME_FIELD

免責聲明 - 媽媽的回答應該有效。 寫到一半時,我意識到我錯了,但我仍然想向您展示我想提出的建議。 它展示了 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)

您可以在此處此處找到所有必要的導入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM