【问题标题】:Custom Auth backend with middleware带有中间件的自定义身份验证后端
【发布时间】:2012-01-08 18:45:57
【问题描述】:

我尝试查看 this answer,以及使用 django 会话 here

使用我的自定义身份验证登录工作正常,但我想使用中间件验证每个请求的令牌,我不知道如何存储令牌以便可以从中间件以及意见。

我尝试从我的身份验证后端存储一个会话变量,但是当我尝试从我的视图中访问它时总是会遇到一个关键错误。

有什么好办法吗?

谢谢!

class MyAuthBackend(object):

    supports_inactive_user = False
    supports_object_permissions = False
    supports_anonymous_user = False

    def authenticate(self, username=None, password=None):
    # This makes a call to my API to varify login, then return token if valid. I need to make login_valid accessible to my middleware and views.
        login_valid = auth.login(username,password)
        if login_valid:
            try:
                user = User.objects.get(username=username)
            except User.DoesNotExist:
                user = User(username=username, password='never_used')
                user.is_active = True
                user.save()
            return user
        return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None





class MyAuthMiddleware(object):
    def process_request(self, request):
        if not request.user.is_anonymous():
    # API call to my backend to check if token is still valid. If not, return to login page.
            token_variable = ???????????
            if isTokenStillValid(token_variable):
                return
            else:
            return HttpResponseRedirect('/accounts/login/?next=%s' % request.path)

【问题讨论】:

    标签: django


    【解决方案1】:

    您是否使用默认的 django.contrib.auth 登录视图进行登录?在登录过程中似乎完全清除了会话(这发生在调用您的身份验证后端之后,在 contrib.auth.login 函数中,描述为here)。

    我认为您可以尝试编写自己的登录视图,使用保留身份验证令牌的替代登录功能,或者将令牌存储在其他地方(数据库表,缓存系统)。后者可能难以允许一个用户同时登录多个。

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 2019-05-17
      • 1970-01-01
      • 2011-01-24
      • 2018-02-24
      • 2012-12-06
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多