【问题标题】:Django: Authorization using query parametersDjango:使用查询参数进行授权
【发布时间】:2018-12-09 00:44:29
【问题描述】:

我正在编写一个聊天应用程序,注册用户可以在其中互相发送消息。

其中一个组件是基于 Django 的消息传递微服务,它具有用于发送和接收消息的 API。为简单起见,只有两个 URL:

# List all messages in Thread "thread_id"
GET /threads/<int:thread_id>/messages/?user_id=123

# Send a message as user "user_id" to Thread "thread_id"
POST /threads/<int:thread_id>/messages/?user_id=123

此服务仅在内部可见,因此不可能欺骗user_ids。

授权基于user_id,它作为查询参数传递给服务并按如下方式处理:

views.py:

class MessagesViewClass(django.views.View):

    def get(request, thread_id):

        # If this user is not part of this thread
        user_id = request.GET.get('user_id')
        if this_user_not_part_of_this_thread(user_id, thread_id):
            raise Some403Exception()

        else:
            process_response_normally()

现在,我正在通过查询参数进行验证。有没有更传统或规范的方式来处理这种类型的授权?

【问题讨论】:

    标签: python django microservices


    【解决方案1】:

    由于只允许登录用户查看和接收消息,因此无需在查询参数中发送 user_id。您可以使用request.user.id 获取登录用户的用户ID。

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 2021-09-11
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多