根据用户的类型,尝试进行身份验证并给予用户一定的权限。但啥都没有发生

Posted

技术标签:

【中文标题】根据用户的类型,尝试进行身份验证并给予用户一定的权限。但啥都没有发生【英文标题】:Traying to authentication and give user certain permission, depending on the type of user. But noting is happening根据用户的类型,尝试进行身份验证并给予用户一定的权限。但什么都没有发生 【发布时间】:2021-06-04 01:28:50 【问题描述】:

根据用户的类型进行身份验证并给予用户一定的权限。但注意到正在发生。 我尝试根据用户类型限制对网站某些功能的访问。但是当我设置条件时,页面上什么也没有发生: 这是我的模型.py

 from django.contrib.auth.models import AbstractUser
 from django.db import models
 from django.urls import reverse

 user_type_choice = (('1', 'majstor'),
                    ('2', 'korisnik'))

 class CustomKorisnici(AbstractUser):
     user_type = models.CharField(max_length=100,blank=True,choices=user_type_choice)
     username = models.CharField(max_length=100,unique=True)
     last_name = models.CharField(max_length=100)
     first_name = models.CharField(max_length=100)
     phone_number = models.CharField(max_length=100)
     is_superuser = models.BooleanField(default=False)
     is_active = models.BooleanField(default=True)
     is_staff = models.BooleanField(default=False)
     email = models.EmailField(max_length=100,unique=True)

在设置中,我设置了:AUTH_USER_MODEL。

 AUTH_USER_MODEL ='korisnici.CustomKorisnici' 

这是我的 login.html 页面。这部分工作正常。

 % extends "nav_footer.html" % 
 % load static %
 % block content %
 <div class="form-group">
   <div class="container">
     <div class="form">
       <form method="post">     
       % csrf_token %
        form.as_p 
       <button id="btn" class="btn" type="submit">Login</button>
       </form>
     </div>
   </div>
  </div>
 </div>
 % endblock %

**在我的 home.html 页面中,我为用户设置了条件,这是一个问题。 **

   % if user.is_authenticated and user.user_type == "korisnik" %
      <div class="col-md-4">
         <a class="nav-link" href="% url 'post_page' %">All posts</a>
       </div>
   % endif %

首先我设置了一个条件 if user.is_authenticated 并且这工作正常。之后只是为了检查,我添加了一个条件 if user.is_authenticated 和 user.username == 'admin'。当我以管理员身份或其他用户名 == 'John' 的条件登录时​​,它工作正常并且链接可见。 但是当我尝试条件 user.user_type == "korisnik" 时,即使我登录 whit 用户,链接也不可见,user_type 是如何设置为 korisnik 的。我不知道我在这里做错了什么。我需要做自定义登录功能还是别的什么

【问题讨论】:

【参考方案1】:

存储在数据库中的值是元组的第一个值。元组('1', 'majstor') 的含义是,第一个值'1' 将存储在'majstor' 类型的用户的字段中。所以在你的模板中你应该写:

% if user.is_authenticated and user.user_type == "2" %

为了使检查更容易,最好的办法是在模型中使用常量。所以你会像这样改变你的模型:

class CustomKorisnici(AbstractUser):
    MAJSTOR = '1'
    KORISNIK = '2'
    USER_TYPE_CHOICE = (
        (MAJSTOR, 'majstor'),
        (KORISNIK, 'korisnik')
     )
    user_type = models.CharField(max_length=100, blank=True, choices=USER_TYPE_CHOICE)
    # rest of the fields etc.

现在在模板中检查会变成:

% if user.is_authenticated and user.user_type == user.KORISNIK %

【讨论】:

以上是关于根据用户的类型,尝试进行身份验证并给予用户一定的权限。但啥都没有发生的主要内容,如果未能解决你的问题,请参考以下文章

android to django - 如何对用户进行身份验证

无法根据访问令牌对用户进行身份验证 - MS Graph API C#

LDAP 用户尝试进行身份验证得到错误 50 访问不足 (openldap)

对用户进行身份验证并仅提供其相关数据

oracle添加用户并给予管理员身份登陆

使用 Laravel Passport 获取经过身份验证的用户并授予密码