调用auth.login()后,Django用户仍然是AnonymousUser

网络雅各布

我正在尝试在用户扫描其ID徽章上的RFID标签之后auth.login()登录用户,但是在致电之后,该用户尚未登录,并且request.user仍然是AnonymousUser

我正在使用以下视图对用户进行身份验证:

def login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            try:
                Models.People.objects.get(id_badge=form.cleaned_data['badge_number'], deleted=False, system_user=True)
            except Models.People.DoesNotExist:
                form.add_error('badge_number', 'Badge number not recognised')
                return render(request, 'login.html', {'form':form})
            user = user.authenticate(id_badge=form.cleaned_data['badge_number'])
            if user is not None:
                auth.login(request, user)
                return redirect(reverse('main-menu'))
            else:
                form.add_error('badge_number', 'Badge number not recognised')
    else:
        form = LoginForm()
    return render(request, 'login.html', {'form': form})

我也有一个自定义的身份验证后端来检查徽章编号:

class RFIDBackend(object):
    def authenticate(id_badge=None):
        try:
            person = Models.People.objects.get(info1=id_badge, deleted=False, system_user=True)
        except Models.People.DoesNotExist, Models.People.MultipleValuesReturned:
            return None
        try:
            user = User.objects.get(username=person.login)
        except User.DoesNotExist:
            return None
        if user.is_active:
            return user
        return None

    def get_user(id_badge=None):
        try:
            person = Models.People.objects.get(info1=id_badge, deleted=False, system_user=True)
        except Models.People.DoesNotExist, Models.People.MultipleValuesReturned:
            return None
        try:
            user = User.objects.get(username=person.login)
        except User.DoesNotExist:
            return None
        return user

尝试登录时,用户已成功重定向到菜单页面,但是模板在尝试将其名称放在页面上时引发错误:

'AnonymousUser' object has no attribute 'first_name'
阿拉斯代尔

您的get_user方法应采用用户的主键,而不是id_badge由于您使用的是内置用户,因此可以使用与Django相同的实现ModelBackend

from django.contrib.auth import get_user_model

class RFIDBackend(object):
    ...
    def get_user(self, user_id):
        UserModel = get_user_model()
        try:
            return UserModel._default_manager.get(pk=user_id)
        except UserModel.DoesNotExist:
            return None

您可以尝试扩展它以对deletedsystem_user字段进行检查如果执行此操作,请进行测试以确保删除用户后它可以按预期运行,但我不能百分百确定它会导致用户注销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何修复 django.contrib.auth.models.AnonymousUser 到用户

来自分类Dev

Symfony 4.4 FOS用户绑定api / auth / login在null上调用成员函数findOneBy()

来自分类Dev

通过身份验证后调用用户模型会产生错误。调用未定义的方法Illuminate \ Auth \ GenericUser

来自分类Dev

如果我使用`sudo`运行命令,它仍然是“由普通用户调用的”吗?

来自分类Dev

加载页面时,Firebase auth.currentUser为null,在页面加载几毫秒后调用authstatechange时,用户加载

来自分类Dev

对用户使用parse-server和auth并调用其他内部REST Web服务

来自分类Dev

Laravel 6.x通过从Axios调用获取当前用户来设置auth()-> user()

来自分类Dev

django.contrib.auth.views.login返回匿名用户

来自分类Dev

通过Laravel 5中的Auth :: User()调用用户对象时,无法访问相关的雄辩模型

来自分类Dev

Django rest-auth:从其他视图集调用RegisterView;sensitive_post_parameters没有收到HttpRequest

来自分类Dev

Auth0 调用接口

来自分类Dev

每当我通过Ajax调用时,Django Rest框架都会用AnonymousUser替换我当前已通过身份验证的用户吗?

来自分类Dev

在Django中创建用户(NOT NULL约束失败:auth_user.last_login)

来自分类Dev

如何调用sqljdbc_auth.dll

来自分类Dev

CakePHP 2.4.5 Auth-未调用isAuthorized

来自分类Dev

django.contrib.auth.login和django.contrib.auth.views.login之间的区别

来自分类Dev

Laravel $auth 调用函数为 $auth->functionname 而不是 $auth->function()

来自分类Dev

p:blockUI在Ajax调用完成后仍然被阻止

来自分类Dev

调用session_name(***)后,PHP PHPSESSID仍然存在

来自分类Dev

设置Laravel的Auth用户

来自分类Dev

Django Registration或django auth?

来自分类Dev

Laravel 5.2 Auth :: login不持久记录用户

来自分类Dev

Laravel 5.2 Auth :: login无法持久保存登录的用户

来自分类Dev

存根创建用户后调用的方法

来自分类Dev

获取用户在Django上返回“ AnonymousUser”

来自分类Dev

添加root用户后如何在MongoDB中使用Auth

来自分类Dev

auth()->user() 更新用户后返回 null

来自分类Dev

使用 makerbundle make:auth 后如何正确添加用户

来自分类Dev

Django中的Auth权限

Related 相关文章

  1. 1

    如何修复 django.contrib.auth.models.AnonymousUser 到用户

  2. 2

    Symfony 4.4 FOS用户绑定api / auth / login在null上调用成员函数findOneBy()

  3. 3

    通过身份验证后调用用户模型会产生错误。调用未定义的方法Illuminate \ Auth \ GenericUser

  4. 4

    如果我使用`sudo`运行命令,它仍然是“由普通用户调用的”吗?

  5. 5

    加载页面时,Firebase auth.currentUser为null,在页面加载几毫秒后调用authstatechange时,用户加载

  6. 6

    对用户使用parse-server和auth并调用其他内部REST Web服务

  7. 7

    Laravel 6.x通过从Axios调用获取当前用户来设置auth()-> user()

  8. 8

    django.contrib.auth.views.login返回匿名用户

  9. 9

    通过Laravel 5中的Auth :: User()调用用户对象时,无法访问相关的雄辩模型

  10. 10

    Django rest-auth:从其他视图集调用RegisterView;sensitive_post_parameters没有收到HttpRequest

  11. 11

    Auth0 调用接口

  12. 12

    每当我通过Ajax调用时,Django Rest框架都会用AnonymousUser替换我当前已通过身份验证的用户吗?

  13. 13

    在Django中创建用户(NOT NULL约束失败:auth_user.last_login)

  14. 14

    如何调用sqljdbc_auth.dll

  15. 15

    CakePHP 2.4.5 Auth-未调用isAuthorized

  16. 16

    django.contrib.auth.login和django.contrib.auth.views.login之间的区别

  17. 17

    Laravel $auth 调用函数为 $auth->functionname 而不是 $auth->function()

  18. 18

    p:blockUI在Ajax调用完成后仍然被阻止

  19. 19

    调用session_name(***)后,PHP PHPSESSID仍然存在

  20. 20

    设置Laravel的Auth用户

  21. 21

    Django Registration或django auth?

  22. 22

    Laravel 5.2 Auth :: login不持久记录用户

  23. 23

    Laravel 5.2 Auth :: login无法持久保存登录的用户

  24. 24

    存根创建用户后调用的方法

  25. 25

    获取用户在Django上返回“ AnonymousUser”

  26. 26

    添加root用户后如何在MongoDB中使用Auth

  27. 27

    auth()->user() 更新用户后返回 null

  28. 28

    使用 makerbundle make:auth 后如何正确添加用户

  29. 29

    Django中的Auth权限

热门标签

归档