with vincent template page loginview custom and django django-authentication

django - vincent - ¿Por qué el segundo usuario me redirige a/accounts/profile/url?



login url django (5)

Estoy usando la vista incorporada de Django para el inicio de sesión del usuario:

url(r''^user/login/$'', ''django.contrib.auth.views.login'', {''template_name'': ''users/templates/login.html''}, name=''user-login''),

Después de iniciar sesión cuando vuelva a iniciar sesión / inicio de sesión, puedo iniciar sesión por segunda vez. Presento el formulario y obtengo:

La URL actual, cuentas / perfil /, no coincide con ninguno de estos.

No he declarado esta url en urls.py

¿Que estoy haciendo mal? ¿Por qué framework quieres redireccionar a esta url?


@CpS proporcionó una muy buena solución, solo quiero mejorarlo un poco:

Por ejemplo, tienes las siguientes urls:

urlpatterns = [ # django''s login/logout url(r''login/$'', ''django.contrib.auth.views.login'', name=''login''), url(r''logout/$'', ''django.contrib.auth.views.logout'', name=''logout''), url(r''logout-then-login/$'', ''django.contrib.auth.views.logout_then_login'', name=''logout_then_login''), url(r''^$'', views.dashboard, name=''dashboard'') ]

y dashboard.html es donde desea redireccionar después de un inicio de sesión exitoso, luego puede modificar su archivo settings.py consecuencia:

from django.core.urlresolvers import reverse_lazy LOGIN_REDIRECT_URL=reverse_lazy(''dashboard'') LOGIN_URL=reverse_lazy(''login'') LOGOUT_URL=reverse_lazy(''logout'')

Estamos usando reverse_lazy() para construir las URL dinámicamente. La función reverse_lazy() invierte las URL al igual que reverse() , pero puede usarla cuando necesite revertir las URL antes de que se cargue la configuración de URL de su proyecto.


Todo esto no funcionó para mí. Utilicé una solución de JavaScript:

En login.html (donde están los botones de inicio de sesión social) coloco este script que se almacena a continuación en el almacenamiento local:

<script> // Check for local storage if (typeof(Storage) !== "undefined") { var h = window.location.href; if (h.indexOf("next") > 0){ var tokens = h.split("="); var nextUrl = tokens[1]; for(i = 2;i< tokens.length;i++){ nextUrl += ("=" + tokens[i]); } localStorage.setItem("next",nextUrl); } } </script>

En la página a la que se redirigen los usuarios, utilicé el siguiente script para redirigir:

$(document).ready(function () { // Check for local storage if (typeof(Storage) !== "undefined") { var nextUrl = localStorage.getItem("next"); if (nextUrl.length > 0){ localStorage.setItem("next",""); window.location = nextUrl; } } else { // Sorry! No web storage support.. } }


revisa tu login.html

<form method="post" action="."> ~blah~ <input type="hidden" name="next" value="/"><!-- login.html must send "next" parameter, and "next" parameter value is url that you want to redirect. --> ~blah~ </form>

buena suerte ~


Explicado en el doc :

(cuentas / perfil / es ...) La URL donde las solicitudes se redirigen después del inicio de sesión cuando la vista contrib.auth.login no obtiene el siguiente parámetro.

Debido a que todavía está autenticado, su solicitud se redirige a esta URL. Para evitar la redirección, debe cerrar la sesión del usuario antes de enviarlo al user/login , cree su vista de inicio de sesión personalizada o agregue el parámetro Siguiente .


django.contrib.auth.views.login redirige a las accounts/profile/ justo después de iniciar sesión.
Es posible que desee establecer LOGIN_REDIRECT_URL dentro de su archivo settings.py a cualquier cosa que desee ...