Django:拦截身份验证以存储会话变量或cookie

时间:2015-05-29 17:09:00

标签: django authentication

我正在研究一个在django上运行的项目。我想在多个地方进行身份验证。首先,我想维护标准的身份验证机制并继续使用它进行站点管理。其次,除了标准身份验证之外,我还要拦截登录请求,并检查用户是否已在另一个系统上进行身份验证,并存储会话变量或cookie,以便稍后进行身份验证。然后在注销时删除会话变量或cookie。第二种认证机制不应该影响第一种。此外,如果第一个成功而第二个失败,则应该对标准管理没有影响。

我已经考虑在设置AUTHENTICATION_BACKENDS元组中声明自定义身份验证后端。但根据我的理解,它会按顺序进行身份验证,并在匹配完成后停止身份验证。

对此有任何指导意见,我们将不胜感激。谢谢

1 个答案:

答案 0 :(得分:4)

如果你需要设置和取消设置cookie或会话var,你可以使用认证模块发送的信号(this answer

示例:

from django.contrib.auth.signals import user_logged_in, user_logged_out

def user_logged_in_hook(sender, **kwargs):
    # kwargs will contain request and user objects
    print kwargs


def user_logged_out_hook(sender, **kwargs):
    # kwargs will contain request and user objects
    print kwargs


user_logged_in.connect(user_logged_in_hook)
user_logged_out.connect(user_logged_out_hook)