根据用户的类型,尝试进行身份验证并给予用户一定的权限。但啥都没有发生
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#