【问题标题】:How to save and pass token a through request object in Django?如何在 Django 中通过请求对象保存和传递令牌?
【发布时间】:2017-03-09 21:07:24
【问题描述】:

所以我正在尝试针对基于令牌的身份验证微服务进行身份验证。

我知道这并不理想,但刚开始我已经编写了这个快速中间件。

中间件.py

def process_request(self, request):
    if request.token = None:
        pass
    else:
        username = validate_token(request.token)
        request.username = username

views.py

def login(request):
    form = LoginForm()

    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            my_token = authservice_login(user,pass)
            request.token = my_token

我的问题是,一旦有人登录并返回令牌,我如何在所有请求之间保持此令牌持久?我想我对 Django 请求对象有点模糊。如果我登录然后转到调用其他视图的其他页面,我是否仍然可以访问我在登录期间创建的 request.token?

我认为我最理想的是在登录后通过中间件将此令牌传递给所有请求?

【问题讨论】:

    标签: django middleware


    【解决方案1】:

    这取决于你想要达到什么效果。如果您不太关心遵循 REST 原则,您可以使用sessions 来存储有关用户登录的信息或与用户相关的任何其他数据。

    但 Django 有 user 对象和 django.contrib.auth 模块,它为您完成了大量的身份验证工作。您通常不需要保持令牌持久化,因为用户对象本身就是持久化的。

    令牌最常与 REST API 一起使用,由客户端与每个请求一起通过安全连接发送。

    【讨论】:

    • 我正在绕过 Django 的内置用户对象。
    • 简单地说,我需要一种“保留”令牌的方法,因为令牌仅由身份验证服务创建并返回一次,因此我需要保留并通过所有请求传递令牌。
    • 我不认为绕过 Django 的内置用户对象是一个好主意,你将不得不重新发明很多常见的任务。 3d 方的身份验证服务可以与django.contrib.auth 集成。尽管如此,如果您仍然喜欢以您的方式进行操作,您可以使用会话来保留令牌,或者将令牌返回给客户端,然后将其与每个请求一起传递。后两种方法都需要特别注意安全性。但这是另一个话题。 BTW,如果你正在构建一个微服务,我建议关注django-rest-framework.org
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多