0

사용자가 로그인 양식을 사용할 때 사용자가 기본적으로 사용자 페이지 (예 : mywebsite.com/userpage)로 이동하도록 허용하려고합니다.django - 다중 로그인 리디렉션

또한 웹 사이트의 다른 암호로 보호 된 페이지로 이동하면 먼저 로그인 페이지로 리디렉션되고 인증되면 액세스하려고했던 원래 페이지로 돌아갑니다.

views.py

def user_login(request): 
    if request.method == 'POST': 
     form = AuthenticationForm(request.POST) 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       # Redirect to a successpage 
       if request.POST['next']: 
        return HttpResponseRedirect(request.POST['next']) 
       else:  
        return HttpResponseRedirect("/" + username + "/") 
      else: 
       errors = 'This account has been disabeled.' 
     else: 
      # Return an 'invalid login' error message. 
      errors = 'There is a problem with the user name and/or the password. Please try again.' 
    else: 
     form = AuthenticationForm() 
    return render_to_response("registration/my_login.html", locals(), context_instance=RequestContext(request)) 

urls.py

urlpatterns = patterns('', 
         url(r'^login/$', user_login,), 

my_login.html

:

내가 로그인 기능을 위해 지금까지 무엇을 가지고
<form action="." method="post" >{% csrf_token %} 
    {{errors}} 
    {{ form.as_p }} 
    <p class="submit"><button type="submit" name="login_user_button" value="Login">Log in</button></p> 
    <input type="hidden" name="next" value="{{ next }}"> 
    </form> 

내 문제는 리디렉션에 대한 내 user_login 함수에서 사용할 수 있도록 "다음"변수의 값을 가져 오는 방법을 모르겠다는 것입니다.

나는 알 수 있듯이 request.POST['next']으로 얻으려고했지만 빈 문자열이 나오므로 어떤 이유로 값이 "다음"변수에 서명되지 않습니다.

아이디어가 있으십니까?

+0

안녕하세요 @avatar, views.py의 '다음'매개 변수가 POST 또는 GET에서 제공되는지 확인하세요. 아마도 POST [ 'next']를 GET [ 'next']로 대체해야합니다. – danihp

+0

나는 생성 된 HTML 페이지에서 소스 코드를 살펴 보았고 다음 입력 파일은 다음과 같습니다 : . 그래서 어떤 이유로 로그인 페이지를 가리키는 웹 링크가 다음 값을 갖더라도 {{next}}는 다음 값을 포착하지 않습니다 (예 : http://mywebsite.com/accounts/login/?next=/messages/). – avatar

답변

2

내 추천 - 로그인 기능을 고민하지 마십시오. 당신은 바퀴 만 재발 명하고 있습니다. 대신 django.auth 모듈과 함께 제공되는 login view을 사용하면 사용자를 이동해야하는 곳으로 리디렉션하는 삽입 페이지 (settings.LOGIN_REDIRECT_URL에 정의 된 URL 포함)로 사용자를 보내야합니다. 내가 명명 된 뷰를 사용하여 리디렉션이 변경했습니다

@login_required 
def index(request): 
    return redirect('user-page', request.user.username) 

참고 :

이 간질보기

은 다음과 같은 간단한 수 있습니다. 사용자가 사이트 URL과 일치하는 사용자 이름을 제공하면 이상한 일이 일어나기를 원하지 않습니다.

login_required 장식품에 유의하십시오. 이렇게하면 자동으로 필요한 로그인 페이지 리디렉션이 제공됩니다.

관련 문제