【问题标题】:Django Multiple Authentication Backends Based On StatusDjango 基于状态的多重身份验证后端
【发布时间】:2013-04-13 12:46:41
【问题描述】:

我想知道如何根据用户是否被标记为员工来告诉 Django 使用哪个身份验证后端。

这个可以吗?

【问题讨论】:

    标签: django django-models python-2.7 django-admin django-authentication


    【解决方案1】:

    由于 Django 使用身份验证后端来获取用户对象,因此在我们调用后端时不知道用户是否会被标记为员工。

    仍然可以通过链接后端来为员工和非员工用户使用不同的后端,如Specifying authentication backends 中所述。例如,如果您的设置是:

     AUTHENTICATION_BACKEND = (
         'myapp.auth.StaffUserBackend',
         'django.contrib.auth.backends.ModelBackend',
     )
    

    myapp.auth.StaffUserBackend 仅识别员工用户,这将在用户进行身份验证时发生:

    • 根据StaffUserBackend 检查凭据。
    • 如果用户是员工并且凭据正确,StaffUserBackend 返回用户对象,我们就完成了。
    • 如果用户不是员工,则会根据 ModelBackend 检查凭据。
    • 如果凭据对标准用户有效,ModelBackend 将返回 User 对象,并且用户照常进行身份验证。
    • 如果任何后端都不接受凭据,则身份验证失败。

    【讨论】:

      【解决方案2】:

      作为 Django 一个接一个地运行所有后端。您可以做的是在您的 views.py 文件中使用身份验证功能。

      例如你想检查员工用户然后

      email = form.cleaned_data['email']
      try:
          name = StaffUser.objects.get(email=email)
      except StaffUser.DoesNotExist:
          return "Do whatever you want"
      user = authenticate(username=form.cleaned_data['email'], password=form.cleaned_data['password'])
      

      只有当用户存在时才会调用你的 autheticaton 函数。

      这是一种粗略的想法,请根据您的方便使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-05
        • 1970-01-01
        • 2019-06-06
        • 2013-06-08
        • 2021-06-20
        • 2020-09-16
        • 2016-01-23
        • 2018-03-28
        相关资源
        最近更新 更多