标签: django-authentication

Django 2.0 身份验证视图中 Reset Done 和 Reset Complete 之间的区别

我正在考虑对 Django 项目实施用户身份验证。我正在阅读文档。它看起来很简单,但有一件事我不明白。

显然,认证包括八个视图:

accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']
Run Code Online (Sandbox Code Playgroud)

在实现密码重置时,我假设我想要执行的操作accounts/password_reset/是向用户转发一封电子邮件。然后,我需要实现accounts/reset/<uidb64>/<token>/,这是通过电子邮件将用户定向到的位置。我不清楚的是当用户成功更新密码后应该做什么。

accounts/reset/done/(或password_resest_complete) 和accounts/password_reset/done/(或)有什么区别password_reset_done

python django django-authentication

3
推荐指数
1
解决办法
596
查看次数

Django 测试:User.authenticate 失败

我已经被这个问题困扰了几个小时。我是 django 和自动化测试的新手,我一直在使用 Selenium 和 django 的 StaticLiveServerTestCase。我一直在尝试测试我的登录表单(顺便说一句,当我使用 runserver 并自己测试它时,它工作得很好。)

一切工作都很好,除了我似乎无法成功登录我的测试用户。我已将断点范围缩小到 django 的 User.authenticate 方法。

User 对象在我的设置中已成功创建,我可以通过在测试方法中访问它的属性来确认这一点。但是,身份验证失败。

我查看了以下内容以寻求帮助,但他们并没有让我走得太远:

知道为什么身份验证失败吗?我需要在设置中添加一些内容吗?

from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import User

from django.contrib.auth import authenticate


class AccountTestCase(StaticLiveServerTestCase):
    def setUp(self):
        self.selenium = webdriver.Chrome()
        super().setUp()
        User.objects.create(username='test', email='test@test.com', password='Test1234', is_active=True)

    def tearDownClass(self):
        self.selenium.quit()
        super().tearDown()

    def test_register(self):
        user = authenticate(username='test', password='Test1234')
        if user is not None: # prints Backend login failed
            print("Backend login …
Run Code Online (Sandbox Code Playgroud)

django selenium django-authentication django-tests

3
推荐指数
1
解决办法
1570
查看次数

使用自定义用户,注册时会忽略设置中的密码验证

在 Django 中,我创建了一个自定义用户。

我的问题是默认验证器不起作用,任何密码都被接受。

我期望默认的密码验证器能够工作,因为我继承了默认的模型/表单类。

在 Django 设置中我有:

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {
            'min_length': 12,
        }
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
Run Code Online (Sandbox Code Playgroud)

]

自定义用户实现:

class User(AbstractBaseUser, MetaData, PermissionsMixin):

    account = models.ForeignKey(Account, blank=True, null=True, related_name='owner', on_delete=models.CASCADE)
    email = models.EmailField(max_length=255, unique=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    is_confirmed = models.BooleanField(default=False)  # email confirmed
    is_active = models.BooleanField(default=False)  # can't login
    is_staff = models.BooleanField(default=False)  # staff user non super
    is_superuser = models.BooleanField(default=False)  # superuser …
Run Code Online (Sandbox Code Playgroud)

django django-authentication django-users

3
推荐指数
1
解决办法
2414
查看次数

Django 在每个用户的 UI 中隐藏帖子(对象)而不影响主模型

我有一个应用程序,显示所有具有如下模型的新闻站点:

class NewsItem(models.Model):
    url = models.CharField(max_length=500, default="",unique=True)
    title = models.CharField(max_length=500, default="")
    hacker_news_url = models.CharField(max_length=500, default="")
    posted_on = models.DateTimeField(default=datetime.now)
    upvote_count = models.IntegerField(default=0)
    comment_count = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)

用户界面: 在此输入图像描述

我已经设置了默认的 django 身份验证来查看此页面。用户界面为每个帖子都有隐藏按钮。所以问题是,如果登录用户隐藏帖子,则必须仅为该用户隐藏该帖子(即使在页面刷新后),而不能从 NewsItem 模型/表中删除。怎么做?请帮助!

这是我的观点.py:

@login_required(login_url='/accounts/login')
def index(request):
    context={'news_items':NewsItem.objects.all().order_by('posted_on')}
    return render(request, "hello.html", context)
Run Code Online (Sandbox Code Playgroud)

django django-models django-admin django-views django-authentication

3
推荐指数
1
解决办法
477
查看次数

Django身份验证

在我的base.html文件中,我正在使用 此处,即使用户已登录,也会显示登录按钮.
{% if user.is_authenticated %}
<a href="#">{{user.username}}</a>
{% else %} <a href="/acc/login/">log in</a>

现在,当我点击log in链接时,它会显示用户名和正常登录视图,表示用户已登录.

那么,怎么了?

django django-templates django-authentication

2
推荐指数
1
解决办法
750
查看次数

有没有办法在创建用户对象时发送用户电子邮件?

在我建立用户的系统中,不能自己注册.用户由其中一个系统管理员添加.因此没有用户注册表单或视图.注册只在管理员中进行,所以我猜send_mail也必须在那边(或者我错了)?

我需要在创建用户时向用户发送一封自动发送的电子邮件,然后才发送给用户(不是每次保存模型).

有人能帮忙吗?有内置的东西吗?或者我该怎么做?

我已经阅读了有关create_user用户管理器的信息,但我认为有一种更好的方法可以编辑管理器.

python django django-admin django-authentication

2
推荐指数
1
解决办法
421
查看次数

django自定义身份验证后端与自定义中间件(用户名,密码和令牌absed auth)

我处于这样一种情况,我需要制作自定义身份验证和自定义中间件来验证和授权用户.我必须在POST请求中设置用户名密码params,或者是否设置了cookie用于基于令牌的身份验证.现在,我知道python中不允许函数重载,我怎么能实现它.我将下面的代码放在自定义身份验证和自定义中间件上.

自定义中间件:

from django.contrib.auth import authenticate

class AuthMiddleWare(object):
    def process_request(self, request):

        if request.path != '/favicon.ico':
            print "inside process_request " + request.path              

            if request.method == 'POST' and request.POST.has_key('username' ) and request.POST.has_key('password'):                     
                authenticate(username = request.POST.get('username'),password = request.POST.get('password'))

            if 'SPRING_SECURITY_REMEMBER_ME_COOKIE' in request.COOKIES:                     
                authenticate(token = request.COOKIES.get('SPRING_SECURITY_REMEMBER_ME_COOKIE'))

        return None
Run Code Online (Sandbox Code Playgroud)

和自定义身份验证后端:

from core.api import NcpAPI       

class CustomNCPAuthBackend(object):     
    """
    This is custom authentication backend.
    Authenticate against the webservices call.

    The method below would override authenticate() of django.contrib.auth    
    """
    def authenticate(self, username = None, password = None):           
        print …
Run Code Online (Sandbox Code Playgroud)

python django django-middleware django-authentication python-2.7

2
推荐指数
1
解决办法
2827
查看次数

Django单元测试; 使用python-social-auth登录

我想为使用python-social-auth的 Django应用程序编写单元测试.运行Django并使用浏览器时,这一切都很棒,感谢python-social-auth!

但是,我似乎无法编写单元测试,因为我无法创建经过身份验证的客户端进行测试.

有没有人这么成功?
你是如何获得经过身份验证的客户端()的?

我试过这个(登录返回false并且不起作用):

self.c = Client()
self.u = User.objects.create(username="testuser", password="password", is_staff=True, is_active=True, is_superuser=True)
self.u.save()
self.auth = UserSocialAuth(user=self.u, provider="Facebook")
self.auth.save()
self.c.login(username=self.u.username, password=self.u.password) 
Run Code Online (Sandbox Code Playgroud)

python django unit-testing oauth django-authentication

2
推荐指数
1
解决办法
1737
查看次数

authenticate()得到了一个意外的关键字参数'username'

在尝试验证我的用户时,我在django中遇到了一个奇怪的错误.

这是代码:

views.py

from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.core.context_processors import csrf
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate, login

def authenticate(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
        else:
            pass
            # Return a 'disabled account' error message
    else:
        pass
        # Return an 'invalid login' error message.
Run Code Online (Sandbox Code Playgroud)

它一直给我这个错误:

Environment:


Request Method: POST
Request URL: …
Run Code Online (Sandbox Code Playgroud)

python authentication django django-authentication

2
推荐指数
1
解决办法
2943
查看次数

如何使未经身份验证的用户只能访问Django视图?

我通过扩展rest_framework.views.APIView类来构建Django API视图。

我已经成功构建了许多仅由经过身份验证的用户才能调用的API。我通过添加以下内容来完成此操作:permission_classes = [permissions.IsAuthenticated,]

有些API我只希望未经身份验证的用户调用。如“ ForgotPassword”。基本上,我想确保API调用程序不会在请求标头中发送JWT令牌。我该如何执行?没有permissions.IsUnAuthenticated

django django-authentication django-rest-framework

2
推荐指数
1
解决办法
429
查看次数