它可以根据员工状态和超级用户状态进行过滤,但是组呢?
我试图弄清楚如何使用其他功能增强authenticate方法.
例如
这个网站的前端非常简单,但管理面板呢?
我估计我应该覆盖User的Manager对象,因为authenticate可能存在于那里.我觉得这很难理解.
提前致谢!:)
python django django-models django-admin django-authentication
我使用django.auth系统,我是这样的:
class RegisterForm(UserCreationForm):
username = forms.RegexField(label= "Username" , max_length = 30, regex = r'^[\w]+$', error_messages = {'invalid': "This value may contain only letters, numbers and _ characters."})
email = forms.EmailField(label = "Email")
first_name = forms.CharField(label = "First name", required = False)
last_name = forms.CharField(label = "Last name", required = False)
class Meta:
model = User
fields = ("username", "first_name", "last_name", "email", )
def save(self, commit = True):
user = super(RegisterForm, self).save(commit = False)
user.first_name = self.cleaned_data["first_name"]
user.last_name = self.cleaned_data["last_name"]
user.email …Run Code Online (Sandbox Code Playgroud) 当我尝试对我的代码的某些部分进行单元测试时,我需要一个用户才能登录.为了减少我使用django_factory_boy用户工厂的灯具数量,但生成的用户无法进行身份验证.
from django_factory_boy.auth import UserF
from django.contrib.auth import authenticate
user = UserF()
user.set_password('password')
Run Code Online (Sandbox Code Playgroud)
然后authenticate(username=user.username, password='password')返回None而不是用户.关于这里缺少什么的想法?
我目前正在开发一个Django站点,用户可以在其中拥有多个"帐户",这样他们就可以在通过站点进行交互时在不同的公共配置文件之间无缝切换.我正在设计的内容可能会吸引每人多次注册(并且不会气馁),我只想提供这样一种方式,即用户可以将配置文件捆绑在一起,轻松切换并且只需要记录一次.
到目前为止我想到的两种方法包括:
一个(User型号+ SiteProfile型号)对和PublicProfile每个人的许多模型.AUTH_PROFILE_MODULE设置为指向SiteProfile模型.这个问题是我不能轻易使用每个对象的权限:这些权限将设置在User对象而不是公共配置文件上,因此当用户伪装成"公共配置文件"时,查看"PublicProfileA"页面的权限也将被应用. "PublicProfileB".
每人一个Account模型和许多(User模型+ UserProfile模型)对.AUTH_PROFILE_MODULE设置为指向UserProfile模型.这将具有按预期工作的权限的额外好处,并且我可以简单地具有自定义后端,其将通过如果用户当前Account以与外键具有相同对象的另一用户登录来切换用户.通过读取Account对象上的字段会发生身份验证,这意味着password每个User对象上的字段都将被浪费.
如上所述,但是继承Account自User.我曾被强烈反对这一点(原因尚不清楚).
这有什么陷阱或更好的方法吗?最终,我应该使用内置User模型作为每人一个模型来识别一组面向公众的配置文件(这些配置文件将FK返回到User对象),或者将其用作配置文件本身,链接回来Account为每个人一个对象?
django database-relations django-models django-authentication
我在我的网站上有facebook认证,我使用omab/django-social-auth
我想将用户重定向到另一个网站,让他们填写他们的详细信息.因此,我希望用户在首次使用自己的Facebook帐户进行身份验证时处于非活动状态,然后在完成表单后,我将其保存为活动用户.
我操纵了我的环境下的django/contrib/auth/models.py和is_active字段一样默认= False; 但是它们被保存为活动用户,但结果仍然相同,即使我从管理面板添加了普通用户.有什么我想念的吗?
class User(models.Model):
"""
Users within the Django authentication system are represented by this
model.
Username and password are required. Other fields are optional.
"""
username = models.CharField(_('username'), max_length=30, unique=True,
help_text=_('Required. 30 characters or fewer. Letters, numbers and '
'@/./+/-/_ characters'))
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
email = models.EmailField(_('e-mail address'), blank=True)
password = models.CharField(_('password'), max_length=128)
is_staff = models.BooleanField(_('staff status'), default=False,
help_text=_('Designates whether the user can log into this …Run Code Online (Sandbox Code Playgroud) 假设我有一个表单在数据库中执行某些操作并且需要通过 POST 发送的用户身份验证,是否有可能在内部请求邪恶的人更改用户以利用系统?
以下示例在数据库中创建一个项目,但需要登录用户。有人可以在request.user 中发送其他用户的数据吗?
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from items_core.models import Item
from items.forms import CreateItemForm
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
@login_required
def create(request):
errors = None
if request.method == 'POST':
form = CreateItemForm(request.POST)
if form.is_valid():
try:
Item.objects.get(
name = form.cleaned_data['name'],
user = request.user
)
errors = 'Item already exist. Please provide other name.'
except Item.DoesNotExist:
Item.objects.create(
name = form.cleaned_data['name'],
user = request.user
)
return redirect('items:list')
form = …Run Code Online (Sandbox Code Playgroud) security authentication django http-post django-authentication
这是我的看法:
def main_page(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = User.objects.create_user(
username=form.clean_data['username'],
password=form.clean_data['password1'],
email=form.clean_data['email']
)
return HttpResponseRedirect('/')
else:
form = RegistrationForm()
variables = {
'form': form
}
return render(request, 'main_page.html', variables)
Run Code Online (Sandbox Code Playgroud)
这是我的main_page.html:
{% if form.errors %}
<p>NOT VALID</p>
{% for errors in form.errors %}
{{ errors }}
{% endfor %}
{% endif %}
<form method="post" action="/">{% csrf_token %}
<p><label for="id_username">Username:</label>{{ form.username }}</p>
<p><label for="id_email">Email Address:</label>{{ form.email }}</p>
<p><label for="id_password">Password:</label>{{ form.password1 }}</p>
<p><label for="id_retypePassword">Retype Password:</label>{{ form.password2 }}</p> …Run Code Online (Sandbox Code Playgroud) forms django django-views django-authentication django-registration
我希望仅在创建用户后将此用户的字段指定为“真”时才将用户添加到组中。创建的每个用户都有一个与之关联的“用户配置文件”。这是实现这种事情的正确方法吗?
模型.py:
def add_group(sender, instance, created, **kwargs):
if created:
sender = UserProfile
if sender.is_in_group:
from django.contrib.auth.models import Group
g = Group.objects.get(name='Some Group')
g.user_set.add(sender)
post_save.connect(add_group, sender=UserProfile)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
这是我的用户身份验证方法:
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return HttpResponseRedirect(reverse('index'))
else:
print('TEST')
messages.info(request, 'Inactive user')
return HttpResponseRedirect(reverse('index'))
else:
messages.error(request, 'Invalid username/password!')
return HttpResponseRedirect(reverse('index'))
else:
return render(request, 'mainapp/login.html', {})
Run Code Online (Sandbox Code Playgroud)
如果用户存在且未激活,则会显示错误消息:
messages.error(request, 'Invalid username/password!')
return HttpResponseRedirect(reverse('index'))
Run Code Online (Sandbox Code Playgroud)
代替:
print('TEST')
messages.info(request, 'Inactive user')
return HttpResponseRedirect(reverse('index'))
Run Code Online (Sandbox Code Playgroud)
我不知道这里有什么问题......有什么线索吗?
django ×10
python ×3
django-admin ×2
django-views ×1
factory ×1
forms ×1
http-post ×1
security ×1
unit-testing ×1