大家好,所有你们都乐于助人(再见无帮助的人: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提供的默认更改密码机制.
我正在使用post_change_redirect提交的表单直接返回我的设置页面,但是我想显示一条消息,向用户保证操作已成功.如何通过密码更改成功检测我是否到达设置视图,并为此添加消息?
我有一个问题,我成功注册用户 - 但是,我希望用户登录注册.这是代表我的注册视图的代码.有关用户未自动登录的原因的任何想法?
笔记:
在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
我使用标准的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) 我正在尝试使用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
我试图在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) 我已使用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
我目前有一个用Django编写的后端和一个chrome扩展,它向该后端发出其余请求。后端设置用于用户注册和通过网页登录。
我想对chrome扩展程序中的用户进行身份验证,以便他们可以登录一次,并且chrome扩展程序将在不同页面上的多次加载中维护会话。然后,应该对扩展中的所有其余请求进行身份验证,使其能够分辨出哪个用户正在处理程序中针对该请求发出给定请求。
我对这种类型的客户端-服务器身份验证非常不熟悉,经过一番环顾后,看起来好像是oauth或简单的https标头身份验证可能是解决之道。我不确定oauth是什么,因为这似乎有些矫kill过正(而且我通常对此并不熟悉),但是我不确定如何在扩展的使用过程中保持https身份验证。有人可以从Django后端中勾勒出必要的元素,以使用javascript进行登录和随后的其余请求吗?
javascript django web-services django-authentication google-chrome-extension
我./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框架相关的所有内容?
我目前正在开发一个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