Opened 17 years ago
Closed 16 years ago
#8916 closed (invalid)
admin auth change password not working
| Reported by: | Owned by: | nobody | |
|---|---|---|---|
| Component: | contrib.admin | Version: | 1.1-beta |
| Severity: | Keywords: | ||
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Trying to access the change password form in auth admin will cause a "ValueError"
Trace is below
Environment:
Request Method: GET
Request URL: http://localhost:8000/admin/auth/user/1/password/
Django Version: 1.0-final-SVN-unknown
Python Version: 2.5.0
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.databrowse',
'pressDB.press',
'pressDB.ext']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware')
Traceback:
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
86. response = callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/sites.py" in root
158. return self.model_page(request, *url.split('/', 2))
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/sites.py" in model_page
177. return admin_obj(request, rest_of_url)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/options.py" in __call__
197. return self.change_view(request, unquote(url))
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/transaction.py" in _commit_on_success
238. res = func(*args, **kw)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/options.py" in change_view
557. obj = model._default_manager.get(pk=object_id)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/manager.py" in get
93. return self.get_query_set().get(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/query.py" in get
297. clone = self.filter(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/query.py" in filter
483. return self._filter_or_exclude(False, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/query.py" in _filter_or_exclude
501. clone.query.add_q(Q(*args, **kwargs))
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/sql/query.py" in add_q
1224. can_reuse=used_aliases)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/sql/query.py" in add_filter
1167. self.where.add((alias, col, field, lookup_type, value), connector)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/sql/where.py" in add
48. params = field.get_db_prep_lookup(lookup_type, value)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/fields/__init__.py" in get_db_prep_lookup
202. return [self.get_db_prep_value(value)]
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/fields/__init__.py" in get_db_prep_value
353. return int(value)
Exception Type: ValueError at /admin/auth/user/1/password/
Exception Value: invalid literal for int() with base 10: '1/password'
Attachments (1)
Change History (17)
comment:1 by , 17 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
comment:2 by , 17 years ago
| Component: | Authentication → django.contrib.admin |
|---|---|
| Resolution: | invalid |
| Status: | closed → reopened |
I am having the same problem on both 1.0 and trunk.
comment:3 by , 17 years ago
| Description: | modified (diff) |
|---|
comment:4 by , 17 years ago
| Resolution: | → worksforme |
|---|---|
| Status: | reopened → closed |
Really the exact same error with the exact same traceback? Because the original poster seemed to come to the conclusion it was a user error. And I can do a get on the change password form in admin using current trunk, so there's something different about what you are doing. Please elaborate on how you have configured things and what exact error you get, including traceback.
comment:5 by , 17 years ago
| Resolution: | worksforme |
|---|---|
| Status: | closed → reopened |
Sure looks the same to me. The new admin seems to work fine for me otherwise. My regular password changing forms work fine, btw.
Traceback (most recent call last):
File "/home/dynnetwork/lib/python2.5/django/core/handlers/base.py", line 86, in get_response
response = callback(request, *callback_args, callback_kwargs)
File "/home/dynnetwork/lib/python2.5/django/contrib/admin/sites.py", line 157, in root
return self.model_page(request, *url.split('/', 2))
File "/home/dynnetwork/lib/python2.5/django/views/decorators/cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, kwargs)
File "/home/dynnetwork/lib/python2.5/django/contrib/admin/sites.py", line 176, in model_page
return admin_obj(request, rest_of_url)
File "/home/dynnetwork/lib/python2.5/django/contrib/admin/options.py", line 197, in call
return self.change_view(request, unquote(url))
File "/home/dynnetwork/lib/python2.5/django/db/transaction.py", line 238, in _commit_on_success
res = func(*args, kw)
File "/home/dynnetwork/lib/python2.5/django/contrib/admin/options.py", line 548, in change_view
obj = model._default_manager.get(pk=object_id)
File "/home/dynnetwork/lib/python2.5/django/db/models/manager.py", line 93, in get
return self.get_query_set().get(*args, kwargs)
File "/home/dynnetwork/lib/python2.5/django/db/models/query.py", line 303, in get
clone = self.filter(*args, kwargs)
File "/home/dynnetwork/lib/python2.5/django/db/models/query.py", line 489, in filter
return self._filter_or_exclude(False, *args, kwargs)
File "/home/dynnetwork/lib/python2.5/django/db/models/query.py", line 507, in _filter_or_exclude
clone.query.add_q(Q(*args, kwargs))
File "/home/dynnetwork/lib/python2.5/django/db/models/sql/query.py", line 1248, in add_q
can_reuse=used_aliases)
File "/home/dynnetwork/lib/python2.5/django/db/models/sql/query.py", line 1191, in add_filter
self.where.add((alias, col, field, lookup_type, value), connector)
File "/home/dynnetwork/lib/python2.5/django/db/models/sql/where.py", line 48, in add
params = field.get_db_prep_lookup(lookup_type, value)
File "/home/dynnetwork/lib/python2.5/django/db/models/fields/init.py", line 202, in get_db_prep_lookup
return [self.get_db_prep_value(value)]
File "/home/dynnetwork/lib/python2.5/django/db/models/fields/init.py", line 353, in get_db_prep_value
return int(value)
ValueError: invalid literal for int() with base 10: '12/password'
comment:6 by , 17 years ago
For future reference please enclose traceback in triple braces ({{{ }}}) so they format properly.
Pity the original poster did not explain what was they did to cause this error, because you seem to have done the same thing. Have you done something to customize the Admin handling for the User object? Because the traceback shows you are calling into the ModelAdmin __call__ function in django/contrib/admin/options.py instead of the one for UserAdmin in django/contrib/auth/admin.py.
Really, this is not a bug in Django, this works out of the box. You've done something with your config to cause this though I'm not sure exactly what. It's really more properly pursued on django-users but it'd be nice to get a resolution noted in this ticket as to how users can cause this. So, please share more details of your config, particularly any admin.site.register calls you have.
comment:7 by , 17 years ago
Aha! I think we're on to something here. I had the following:
from spackle.spackle1.models import * from django.contrib import admin admin.site.register(School) admin.site.register(Cohort) admin.site.register(PersonAggregation) admin.site.register(Course) class PersonInline(admin.StackedInline): model=Person max_num=1 extra=1 class UserOptions(admin.ModelAdmin): inlines = [PersonInline,] admin.site.unregister(User) admin.site.register(User, UserOptions) admin.site.register(Person)
It works fine, now that I've taken out the UserOptions stuff.
So, what's the trick in newforms admin to doing what I'm trying to do here? Is there a recommended way to do this?
Ben
comment:8 by , 17 years ago
I assume you're supposed to add:
from django.contrib.auth.admin import UserAdmin
and change:
class UserOptions(admin.ModelAdmin):
to
class UserOptions(UserAdmin):
That way your customized User admin doesn't lose the code already in UserAdmin, you just override or add what you want.
comment:9 by , 17 years ago
| Resolution: | → invalid |
|---|---|
| Status: | reopened → closed |
I agree with Karen; there's no Django bug here. Subclassing has to be done carefully.
(Karen: if there's some other reason you've left this open, please reopen. Looks like the reported problem is a non-issue, though).
comment:10 by , 17 years ago
I am getting this same error on 2 unrelated sites I just recently upgraded to django 1.0. I don't have any admin class registered with my user model on either site, only:
admin_site = admin.AdminSite() admin_site.register(User)
I tried importing the UserAdmin as recommended above and registering with the User model to the admin site, but I am still getting the error described above on 2 sites I've tested now:
Environment:
Request Method: GET
Request URL: http://aaronfay.ca/admin/auth/user/1/password/
Django Version: 1.0-final-SVN-unknown
Python Version: 2.5.1
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.comments',
'django.contrib.contenttypes',
'django.contrib.markup',
'django.contrib.sessions',
'django.contrib.sites',
'common',
'region',
'profile',
'tagging']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
'middleware.StatsMiddleware')
Traceback:
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/core/handlers/base.py" in get_response
81. response = middleware_method(request, callback, callback_args, callback_kwargs)
File "/home/aaronfay/webapps/aaronfay/aaronfay/middleware.py" in process_view
20. response = view_func(request, *view_args, **view_kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/sites.py" in root
158. return self.model_page(request, *url.split('/', 2))
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/views/decorators/cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/sites.py" in model_page
177. return admin_obj(request, rest_of_url)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/options.py" in __call__
197. return self.change_view(request, unquote(url))
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/transaction.py" in _commit_on_success
238. res = func(*args, **kw)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/options.py" in change_view
557. obj = model._default_manager.get(pk=object_id)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/manager.py" in get
93. return self.get_query_set().get(*args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/query.py" in get
297. clone = self.filter(*args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/query.py" in filter
483. return self._filter_or_exclude(False, *args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/query.py" in _filter_or_exclude
501. clone.query.add_q(Q(*args, **kwargs))
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/sql/query.py" in add_q
1224. can_reuse=used_aliases)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/sql/query.py" in add_filter
1167. self.where.add((alias, col, field, lookup_type, value), connector)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/sql/where.py" in add
48. params = field.get_db_prep_lookup(lookup_type, value)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/fields/__init__.py" in get_db_prep_lookup
202. return [self.get_db_prep_value(value)]
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/fields/__init__.py" in get_db_prep_value
353. return int(value)
Exception Type: ValueError at /admin/auth/user/1/password/
Exception Value: invalid literal for int() with base 10: '1/password'
I'm not certain I should reopen the ticket, but I wanted to let you know I am getting the error also. The 2 sites I tested are on 2 separate servers, both with Django 1.0 release.
comment:11 by , 17 years ago
You are not showing how you registered with UserAdmin. The code you displayed that you *only* have is wrong. That uses a default ModelAdmin which will lead to that error.
by , 17 years ago
| Attachment: | change password form ERROR.PNG added |
|---|
when click "change password form", Wrong
comment:12 by , 17 years ago
Hi, I'm leaving this ticket closed because I'm a complete newb, and I don't have the experience to figure out whether this is my fault or not. But for what it's worth I seem to have exactly the same problem as a few other people here. Traceback is below. It's what I get when I click the "change password form" link in the Django Administration when editing a User. Besides adding
admin.site.register(User)
admin.site.register(Group)
to the admin.py in my app, I haven't done anything else to monkey with User. At the top of the same file, I import:
from django.contrib import admin
from models import *
from datetime import datetime
from django.contrib.auth.models import Group, User
That's it.
After googling, I've found that if I create a password in the Python interpreter like this:
import md5
md5.new('test').hexdigest()
'098f6bcd4621d373cade4e832627b4f6'
and then paste 098f6bcd4621d373cade4e832627b4f6 into the field, when I come back after saving it, it's been converted to a sha encrypted password and I can log in successfully with the new password. But a) this isn't feasible for regular users of the admin panel, and b) the "change password form" link remains broken in any case.
My apologies in advance if I've left something important out.
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/auth/user/2/password/
Django Version: 1.1 pre-alpha SVN-9613
Python Version: 2.5.2
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.flatpages',
'd_utilities.oofle',
'adminStuff']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware')
Traceback:
File "C:\Python25\lib\site-packages\django\core\handlers\base.py" in get_response
86. response = callback(request, *callback_args, **callback_kwargs)
File "C:\Python25\lib\site-packages\django\contrib\admin\sites.py" in root
157. return self.model_page(request, *url.split('/', 2))
File "C:\Python25\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)
File "C:\Python25\lib\site-packages\django\contrib\admin\sites.py" in model_page
176. return admin_obj(request, rest_of_url)
File "C:\Python25\lib\site-packages\django\contrib\admin\options.py" in __call__
197. return self.change_view(request, unquote(url))
File "C:\Python25\lib\site-packages\django\db\transaction.py" in _commit_on_success
238. res = func(*args, **kw)
File "C:\Python25\lib\site-packages\django\contrib\admin\options.py" in change_view
548. obj = model._default_manager.get(pk=object_id)
File "C:\Python25\lib\site-packages\django\db\models\manager.py" in get
93. return self.get_query_set().get(*args, **kwargs)
File "C:\Python25\lib\site-packages\django\db\models\query.py" in get
303. clone = self.filter(*args, **kwargs)
File "C:\Python25\lib\site-packages\django\db\models\query.py" in filter
489. return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Python25\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
507. clone.query.add_q(Q(*args, **kwargs))
File "C:\Python25\lib\site-packages\django\db\models\sql\query.py" in add_q
1255. can_reuse=used_aliases)
File "C:\Python25\lib\site-packages\django\db\models\sql\query.py" in add_filter
1198. self.where.add((alias, col, field, lookup_type, value), connector)
File "C:\Python25\lib\site-packages\django\db\models\sql\where.py" in add
48. params = field.get_db_prep_lookup(lookup_type, value)
File "C:\Python25\lib\site-packages\django\db\models\fields\__init__.py" in get_db_prep_lookup
202. return [self.get_db_prep_value(value)]
File "C:\Python25\lib\site-packages\django\db\models\fields\__init__.py" in get_db_prep_value
353. return int(value)
Exception Type: ValueError at /admin/auth/user/2/password/
Exception Value: invalid literal for int() with base 10: '2/password'
comment:13 by , 17 years ago
Replying to donkeyhotty:
Hi, I'm leaving this ticket closed because I'm a complete newb, and I don't have the experience to figure out whether this is my fault or not. But for what it's worth I seem to have exactly the same problem as a few other people here. Traceback is below. It's what I get when I click the "change password form" link in the Django Administration when editing a User. Besides adding
admin.site.register(User)
admin.site.register(Group)
Why are you registering User and Group to admin in your own app? If you use admin.autodiscover() in your urls.py then User and Group will be registered with the custom admin models defined for them by default. If you are overriding them in some way you need to inherit from the cusom models defined in /django/contrib/auth/admin.py, not ModelAdmin, because the password stuff, for instance, is added in the custom model. So the problem is resulting because you are including 'admin.site.register(User)' in your own code. That registration will not support changing passwords as the default one set up in django/contrib/auth/admin.py does.
If you have follow-up questions, the django-users list is a better place for questions like this.
comment:14 by , 17 years ago
I stumbled across this ticket a little bit ago and finally came back to fix my problem.
For future reference:
Before (code that generated this error):
from django.contrib import admin
class MyUserAdmin(admin.ModelAdmin):
list_display = ('username', 'email', 'date_joined', 'last_login', 'is_active')
form = MyUserAdminForm
After (code that works fine):
from django.contrib.auth.admin import UserAdmin
class MyUserAdmin(UserAdmin):
list_display = ('username', 'email', 'date_joined', 'last_login', 'is_active')
form = MyUserAdminForm
I hope others find this helpful.
comment:15 by , 16 years ago
| Resolution: | invalid |
|---|---|
| Status: | closed → reopened |
| Version: | 1.0 → 1.1-beta-1 |
This error is reproducible in 1.1 beta 1 (it is not a result of the aforementioned subclassing missteps):
- On a basic installation, enable the admin interface, set up a basic DB (sqlite3 and mysql tested, should not matter), and sync.
- Create an admin user.
- Run runserver; enter the admin interface (obviously that's all that will be available) and edit your previously-created admin user.
- The 'change password form' link under the Password field (containing the hash) works.
- The 'Change password' link next to 'Welcome, [username]' in the upper right corner leads to this 'invalid literal' page.
Working:
/admin/auth/user/1/password/
Not working:
/admin/auth/user/1/admin/password_change/
Unfortunately, I don't have time to dig through the admin code, so I don't know what the 'password_change' form looks like... if it's pointing to the same place as the working 'password' link, this may just be a quick template change.
comment:16 by , 16 years ago
| Resolution: | → invalid |
|---|---|
| Status: | reopened → closed |
That's because of bug #10061, closing this again.
No error, i just need to think