cryg0
cryg0

Reputation: 55

Django rest framework authentication issue

I have custom token creating and decoding methods. Now everytime I get request I need to decode token to get request user or I get anonymous user. How can I decode it without repeating every time these lines?

    auth = get_authorization_header(request).split()

    if auth and len(auth) == 2:
        token = auth[1].decode('utf-8')
        id = decode_access_token(token)

Upvotes: 0

Views: 110

Answers (1)

TymoteuszLao
TymoteuszLao

Reputation: 954

You can create a middleware, where you decode the token and pass the info about the user to the class/function view

class SimpleMiddleware:
  def __init__(self, get_response):
    self.get_response = get_response
    # One-time configuration and initialization.

  def __call__(self, request):
    # Code to be executed for each request before
    # the view (and later middleware) are called.
    auth = get_authorization_header(request).split()
    user = None
    if auth and len(auth) == 2:
      token = auth[1].decode('utf-8')
      id = decode_access_token(token)
      user = ... # get user
    response = self.get_response(request, user)

    # Code to be executed for each request/response after
    # the view is called.

    return response

And in your view

@method_decorator(SimpleMiddleware, name='dispatch')
class SimpleView(View):

  def post(self, request, user):
    pass

Upvotes: 1

Related Questions