Opened 16 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 , 16 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:2 by , 16 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 , 16 years ago
Description: | modified (diff) |
---|
comment:4 by , 16 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 , 16 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 , 16 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 , 16 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 , 16 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 , 16 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 , 16 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 , 16 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 , 16 years ago
Attachment: | change password form ERROR.PNG added |
---|
when click "change password form", Wrong
comment:12 by , 16 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 , 16 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 , 16 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