Django公司请求.用户更改页面后变为匿名。使用自定义用户模式

2024-04-26 14:18:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是扩展AbstractBaseUser的自定义用户模型。这是用户模型:

class cUser(AbstractBaseUser):
    def save(self, *args, **kwargs):
        pass
    role_id = models.IntegerField()
    user_id = models.IntegerField()
    email = models.CharField(max_length=40)
    password = models.CharField(max_length=40)
    f_name = models.CharField(max_length=40)
    l_name = models.CharField(max_length=40)
    address_id = models.IntegerField()
    phone_num = models.IntegerField()
    loan_item_count = models.IntegerField()
    id = models.IntegerField(unique = True, primary_key = True)

    def __init__(self, dictionary, *args, **kwargs):
        self.role_id = int(dictionary['role_id'])
        self.user_id = dictionary['user_id']
        self.email = dictionary['email']
        self.password = dictionary['password']
        self.f_name = dictionary['f_name']
        self.l_name = dictionary['l_name']
        self.address_id = dictionary['address_id']
        self.phone_num = dictionary['phone_num']
        self.loan_item_count = dictionary['loan_item_count']
        self.id = self.user_id

    USERNAME_FIELD = 'user_id'
    class Meta:
        managed = False

我不希望模型以任何方式影响数据库。我通过一个简单的原始SQL查询从一个网关方法加载它。在

我是这样处理登录的:

^{pr2}$

如您所见,我正在将登录前的后端设置为无需传递密码即可进行身份验证-当通过比较传入的密码与从数据库中检索到的密码来创建用户对象时,将执行密码检查。在

如果我返回一个render,如下所示,下一页将包含请求.用户对象。如果我返回重定向,它不会。另外,如果我离开这个页面,用户会再次变得未经身份验证和匿名,从而失去会话。在

如果您能提供任何关于为什么会发生这种情况的帮助,我们将不胜感激。在


Tags: 用户name模型selfid密码dictionarymodels
2条回答

重定向时,请求完成,并将重定向代码发送给客户机,然后客户机向新页面发出新请求,而不需要登录表单的POST数据。用户可能没有得到他们的令牌。在这种情况下,呈现一个页面,让它们在延迟几秒钟后登录,然后将它们重定向到正确的位置。在

因此,通过将userGateway()转换为适当的auth后端并像这样实现它,就解决了这个问题。在

解释原因:

django中的sessionID存储用户PK的哈希值以及用于登录的auth后端。每当发送一个新请求时,所需的数据就会使用这个散列从数据库延迟加载。在

这就是login()在登录页面上正确验证用户身份的原因,因为它几乎是被迫的。但是,一旦发生另一个请求,它就无法从数据库加载用户的数据,并刷新sessionid。在

相关问题 更多 >