标签: django-authentication

Django创建用户然后登录的问题

大家好,所有你们都乐于助人(再见无帮助的人:D).我正在尝试在django(1.2.4)中创建用户,然后在保存后将其登录.我的问题是我收到了NotImplementedError并查看了由django.contrib.auth.models.AnonymousUser引发的回溯.这是我的视图代码的一部分:

def signup(request):
    if request.method == 'POST': # If the form has been submitted...
        p = request.POST
        if not request.user.is_authenticated():
            form = UserForm(request.POST) # A form bound to the POST data
            if form.is_valid(): # All validation rules pass
                # Process the data in form.cleaned_data
                # ...
                form.save()
                user=authenticate(username=p['username'],password=p['password'])
                login(request,user)
                return HttpResponseRedirect('/') # Redirect after POST
Run Code Online (Sandbox Code Playgroud)

因此,在我看来,它正在尝试登录任何鼠标用户而不是我正在验证的用户,我该如何克服这个问题?

感谢PS用户正在数据库中创建,它不会使用此代码登录.

追溯:

环境:
请求方法:POST
请求URL:http:// localhost:8000/signup /
Django版本:1.2.4
Python版本:2.6.1
已安装的应用程序:
['django.contrib.auth',
'django.contrib.contenttypes' ,
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.admindocs',
'django_extensions',
' REDACTED_APPs ',已安装中间件:('django.middleware.common.CommonMiddleware','django.middleware.locale.LocaleMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django. contrib.messages.middleware.MessageMiddleware','django.contrib.sessions.middleware.SessionMiddleware') …

django django-views django-authentication

5
推荐指数
1
解决办法
6478
查看次数

密码更改后显示消息?

我正在使用django提供的默认更改密码机制.

我正在使用post_change_redirect提交的表单直接返回我的设置页面,但是我想显示一条消息,向用户保证操作已成功.如何通过密码更改成功检测我是否到达设置视图,并为此添加消息?

django django-authentication

5
推荐指数
1
解决办法
4030
查看次数

用户注册后Django自动登录(1.4)

我有一个问题,我成功注册用户 - 但是,我希望用户登录注册.这是代表我的注册视图的代码.有关用户未自动登录的原因的任何想法?

笔记:

  • 用户正在正确注册,他们可以在此之后登录
  • authenticate(**kwargs)正在返回正确的用户
  • 在settings.py我有:

    AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) 
    
    Run Code Online (Sandbox Code Playgroud)

谢谢!

def register(request):
    user_creation_form = UserCreationForm(request.POST or None)
    if request.method == 'POST' and user_creation_form.is_valid():
        u_name = user_creation_form.cleaned_data.get('username')
        u_pass = user_creation_form.cleaned_data.get('password2')
        user_creation_form.save()
        print u_name # Prints correct username
        print u_pass # Prints correct password
        user = authenticate(username=u_name,
                            password=u_pass)
        print 'User: ', user # Prints correct user
        login(request, user) # Seems to do nothing
        return HttpResponseRedirect('/book/') # User is not logged in on this page
    c = RequestContext(request, {'form': user_creation_form})
    return render_to_response('register.html', …
Run Code Online (Sandbox Code Playgroud)

python authentication django django-views django-authentication

5
推荐指数
1
解决办法
3486
查看次数

在Django中重置密码后验证用户

我使用标准的Django视图password_reset_confirm()来重置用户的密码.用户在信中跟随密码重置链接后,输入新密码,然后查看将其重定向到站点根目录:

urls.py

url(r'^password-reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        'django.contrib.auth.views.password_reset_confirm', {
        'template_name': 'website/auth/password_reset_confirm.html',
        'post_reset_redirect': '/',
    }, name='password_reset_confirm'),
Run Code Online (Sandbox Code Playgroud)

Django重定向用户后,他没有经过身份验证.我不希望他再次输入密码,相反,我想在设置新密码后立即对他进行身份验证.

为了实现此功能,我创建了一个委托视图.它包装标准的并处理其输出.因为标准视图仅在密码重置成功时重定向用户,所以我检查它返回的响应的状态代码,如果是重定向,则再次从DB检索用户并验证他.

urls.py

url(r'^password-reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        views.password_reset_confirm_delegate, {
        'template_name': 'website/auth/password_reset_confirm.html',
        'post_reset_redirect': '/',
    }, name='password_reset_confirm'),
Run Code Online (Sandbox Code Playgroud)

views.py

@sensitive_post_parameters()
@never_cache
def password_reset_confirm_delegate(request, **kwargs):
    response = password_reset_confirm(request, **kwargs)
    # TODO Other way?
    if response.status_code == 302:
        try:
            uid = urlsafe_base64_decode(kwargs['uidb64'])
            user = User.objects.get(pk=uid)
        except (TypeError, ValueError, OverflowError, User.DoesNotExist):
            pass
        else:
            user = authenticate(username=user.username, passwordless=True)
            login(request, user)
    return response
Run Code Online (Sandbox Code Playgroud)

backends.py

class PasswordlessAuthBackend(ModelBackend):
    """Log in to Django without providing a password.

    """
    def authenticate(self, username, passwordless=False):
        if …
Run Code Online (Sandbox Code Playgroud)

django django-authentication

5
推荐指数
2
解决办法
1565
查看次数

Django休息框架认证测试

我正在尝试使用JWT进行身份验证的测试用例,在这种情况下使用django-rest-framework-jwt,然后,curl我得到了下一个,所以:

curl -X POST -d "email=testuser@test.com&password=testing" http://localhost:8000/api/auth/token/
Run Code Online (Sandbox Code Playgroud)

得到:

{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo0LCJlbWFpbCI6InRlc3R1c2VyQHRlc3QuY29tIiwiZXhwIjoxNDIyNTkxMTQ5LCJ1c2VybmFtZSI6InRlc3R1c2VyQHRlc3QuY29tIn0.OT8ggcZYWxcbSy0Vv8u5PA3QISIdarNXTVuvu4QQjnw"}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的测试用例时:

class BaseTestCase(TestCase):

    def setUp(self):
        self.csrf_client = APIClient(enforce_csrf_checks=True)
        self.email = 'testuser@test.com'
        self.name = 'test user'
        self.password = 'testing'
        user = Usuario.objects.create_user(email=self.email, name=self.name, password=self.password)
        user.save()
        self.data = {
            'email': self.email,
            'password': self.password
        }
        self.url = '/api/auth/token/'


class ObtainJSONWebTokenTests(BaseTestCase):

    def test_jwt_login_json(self):
        """
        Ensure JWT login view using JSON POST works.
        """
        client = APIClient(enforce_csrf_checks=True)

        response = client.post(self.url, self.data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)

    def test_jwt_login_json_incomplete_creds(self):
        """
        Ensure JWT login view …
Run Code Online (Sandbox Code Playgroud)

django django-authentication django-testing django-rest-framework

5
推荐指数
2
解决办法
2742
查看次数

使用参数'()'和关键字参数'{}'找不到'password_change_done'的反转

背景

我试图在Django项目中自定义身份验证视图,但我似乎无法运行自定义的password_change视图.我使用Django 1.8.2和Python 2.7.

urls.py我的模块userauth如下所示:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('django.contrib.auth.views',
    url(r'^login/$', 'login', {'template_name': 'userauth/login.html'},
        name='userauth_login'),
    url(r'^logout/$', 'logout', {'next_page': '/'},
        name='userauth_logout'),
    url(r'^password-change/$', 'password_change',
        {'template_name': 'userauth/password_change_form.html'},
        name='userauth_password_change'),
    url(r'^password-change-done/$', 'password_change_done',
        {'template_name': 'userauth/password_change_done.html'},
        name='userauth_password_change_done'),
)
Run Code Online (Sandbox Code Playgroud)

这在主要参考urls.py如下:

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^account/', include('userauth.urls')),
]
Run Code Online (Sandbox Code Playgroud)

我的模板 userauth/password_change_form.html

{% extends "base.html" %}

{% block title %}{{ block.super }} - Change Password{% endblock %}

{% block toggle_login %}{% endblock %}

{% block content %}
<form action="{% url …
Run Code Online (Sandbox Code Playgroud)

python django django-authentication

5
推荐指数
2
解决办法
4921
查看次数

使用Django Rest Framework进行非用户连接的自定义身份验证

我已使用TokenAuthentication启用了使用DRF的用户身份验证

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
         'rest_framework.authentication.TokenAuthentication',
         'rest_framework.authentication.SessionAuthentication'
    ),
    'DEFAULT_MODEL_SERIALIZER_CLASS':
        'rest_framework.serializers.ModelSerializer',
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.AllowAny',
    ),
    #'EXCEPTION_HANDLER': 'apps.core.exceptions.custom_exception_handler'

}
Run Code Online (Sandbox Code Playgroud)

我有以下型号:

class Device(CreationModificationMixin):
    """
    Contains devices (WW controllers).  A device may be associated with the Owner
    """
    _STATUSES = (
        ('A', 'Active'), # when everything is okay
        ('I', 'Inactive'), # when we got nothing from SPA controllers for X minutes
        ('F', 'Failure'), # when controller says it has issues
    )

    _TYPES = (
        ('S', 'Spa'),
        ('P', 'Pool'),
    )

    udid    = models.CharField(max_length=255, verbose_name="Unique …
Run Code Online (Sandbox Code Playgroud)

authentication django django-authentication django-rest-framework

5
推荐指数
2
解决办法
965
查看次数

使用Django后端验证Chrome扩展

我目前有一个用Django编写的后端和一个chrome扩展,它向该后端发出其余请求。后端设置用于用户注册和通过网页登录。

我想对chrome扩展程序中的用户进行身份验证,以便他们可以登录一次,并且chrome扩展程序将在不同页面上的多次加载中维护会话。然后,应该对扩展中的所有其余请求进行身份验证,使其能够分辨出哪个用户正在处理程序中针对该请求发出给定请求。

我对这种类型的客户端-服务器身份验证非常不熟悉,经过一番环顾后,看起来好像是oauth或简单的https标头身份验证可能是解决之道。我不确定oauth是什么,因为这似乎有些矫kill过正(而且我通常对此并不熟悉),但是我不确定如何在扩展的使用过程中保持https身份验证。有人可以从Django后端中勾勒出必要的元素,以使用javascript进行登录和随后的其余请求吗?

javascript django web-services django-authentication google-chrome-extension

5
推荐指数
0
解决办法
278
查看次数

将Django升级到1.8会产生不相关的站点框架警告

./manage.py runserver将Django从1.7升级到1.8后运行时出现以下警告两次.

.../django/contrib/sites/models.py:78: RemovedInDjango19Warning: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.

该项目仍然运行良好,但我想摆脱警告.我没有在我的项目中使用Sites框架,但是当我添加'django.contrib.sites'INSTALLED_APPS项目列表中时警告消失了settings.py.所以这照顾了警告,我很高兴.

但随后项目开始在登录提示符下要求数据库中的站点.现在,整个事情是我根本不需要Sites框架.但现在我似乎被迫管理一个数据库条目,需要在安装过程中考虑它,当我只是试图摆脱警告时.

似乎登录代码django.contrib.auth依赖于代码.但是,在Django的文档中,我发现了这个断言:"site_name:site.name的别名.如果你没有安装站点框架,这将被设置为request.META ['SERVER_NAME']的值.更多信息在网站上,请参阅"网站"框架."

所以看起来作者django.contrib.auth认为Sites框架是可选的,但从我的情况来看,事实并非如此.

因此我的问题.是否有可能使用Django(可能是贡献的)身份验证系统而根本不使用Sites框架并且仍然摆脱该警告以及与Sites框架相关的所有内容?

python django django-authentication django-sites

5
推荐指数
1
解决办法
72
查看次数

Django + JSON Web令牌+禁用基于会话的授权

我目前正在开发一个Django项目,该项目希望替换和禁用Django基于cookie的传统会话,并用JSON Web令牌替换它,以作为对我网站上的用户进行用户身份验证的一种方式(``需要登录的用户身份验证''网站的一部分,而不仅仅是REST API)。

我希望在Web应用程序中使用JSON Web令牌的方式:登录页面将进行API调用并接收JSON Web令牌作为响应,并且JSON Web令牌将通过(本地存储,会话存储或cookie)进行存储。JSON Web令牌将在后续的HTTP请求(登录后)中传递到HTTP标头中,以便服务器知道我们是授权用户。

我看过的某些库是djangorestframework库。似乎可以保护有关网站API的某些URL(不是我想要的)。是否有任何库可以用Django Web令牌替换Django使用的常规“基于cookie的”会话,并且具有“基于cookie的”会话授权方案的正常功能(正常含义是“登录用户并注销用户可以在该网站以及Django的默认管理面板 ')如果是,我如何将该库与当前的Web应用程序集成以实现正常功能?

我还希望禁用传统的“基于cookie的”会话。如何完全禁用它,以便使用JSON Web令牌完成用户身份验证?

django django-authentication session-cookies django-rest-framework json-web-token

5
推荐指数
1
解决办法
963
查看次数