Opened 9 years ago

Closed 8 years ago

#3372 closed (fixed)

django.contrib.auth.views.password_change is tied to the URL /accounts/login/

Reported by: Rob Hudson <treborhudson@…> Owned by: adrian
Component: Contrib apps Version: master
Severity: Keywords: login
Cc: treborhudson@…, john@… Triage Stage: Design decision needed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

There's a problem when trying to set up your login/auth URLs different than Django's defaults. The one I've been unable to work around without copying/pasting all of the function is django.contrib.auth.views.password_change.

Here's the gist of the problem...

  1. password_change is decorated with Django's default login_required decorator.
  2. The default login_required decorator uses the (un-overridable) LOGIN_URL variable.
  3. The LOGIN_URL variable is set to "/accounts/login/".

I see 2 fixes...

1) Move LOGIN_URL to global_settings.py

This would allow the default Django login_required decorator to be easily overridden, making things much easier across the board. (Anything decorated with login_required is fixed, the shortcut methods like "redirect_to_login" and "logout_then_login" are fixed.

And there's already variables for the contrib.comments system in global_settings.py so there's already precedent for having contrib apps with stuff in global_settings.py. :)

2) Provide an un-decorated password_change method

Having a password_change method that isn't decorated allows me to decorate it with my own login_required decorator, which redirects to my own login URL if not authenticated.

Either of these should be possible without breaking backwards compatibility.

I have a patch for either. Should I submit both patches? Or should I wait for a design decision and submit the patch for what's decided (if either of the above)?

Change History (5)

comment:1 Changed 9 years ago by Rob Hudson <treborhudson@…>

  • Cc treborhudson@… added
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

(Adding myself to CC list and un-checking "Has Patch")

comment:2 Changed 9 years ago by Simon G. <dev@…>

  • Keywords login added
  • Triage Stage changed from Unreviewed to Design decision needed

comment:3 Changed 9 years ago by thebanana <john@…>

  • Cc john@… added
  • Has patch unset

You can already change LOGIN_URL. Just put this in your project's settings.py file:

import django.contrib.auth

django.contrib.auth.LOGIN_URL = '/mynew/loginurl/'

comment:4 Changed 8 years ago by SmileyChris

  • Resolution set to fixed
  • Status changed from new to closed

LOGIN_URL was put into global_settings a while back

comment:4 Changed 8 years ago by SmileyChris

  • Resolution set to fixed
  • Status changed from new to closed

LOGIN_URL was put into global_settings in [5072]

Note: See TracTickets for help on using tickets.
Back to Top