2012-07-30 2 views
1

기본적으로 데코레이터 @permission_required($SOME_PERMISSION)은 요청한 사용자에게이보기를 요청하는 데 필요한 권한이 있는지 확인하고, 그렇지 않은 경우 로그인 페이지 나 다른 지정된 페이지로 리디렉션됩니다. 예를 들어 사용자가 로그인하지 않은 경우 로그인 페이지로 리디렉션됩니다).
내 문제는 로그인 한 사용자가 로그인 페이지로 리디렉션하고 싶지만 필수 권한이없는 로그인 한 사용자가있을 수 있습니다. 기본적으로 사용자는 로그인 페이지로 리디렉션되고 있습니다. 그는 이미 로그인 했으므로 요청한 페이지로 다시 연결되며 여기서 루프가 발생합니다.
그래서 내가 원하는 것은이 데코레이터의 동작을 변경하는 것입니다 (@permission_required를 사용하는 대신 내보기 함수에서 동등한 코드를 작성하여) 사용자가 로그인하지 않은 요청 된 페이지를 볼 수 없는지 확인하십시오. 그는 로그인했지만 권한이 없으므로 올바른 페이지로 리디렉션됩니다. 어떤 도움을 크게 감상 할 수있다 :)
사전에 감사django 데코레이터 함수 수정, Permissionn_required

+0

특정 질문을하십시오. "어떤 도움"을 요구하는 것은 아닙니다. –

+0

request.user.is_authenticated()를 사용하십시오. https://docs.djangoproject.com/en/dev/topics/auth/ – Pramod

답변

3

는 것처럼, permission_requiredlogin_url 매개 변수를 전달 :

:

@permission_required($SOME_PERMISSION, login_url='/my/custom/page') 
+1

이렇게하면'@relegal_required' 위의'@ login_required' 데코레이터를 추가해야합니다. 그렇지 않으면 로그인하지 않은 사용자도 사용자 정의 페이지로 리디렉션됩니다. – themanatuf

+0

@themanatuf 감사합니다! 둘 다 함께 사용하면 트릭이되지만, 한가지, URL은 이제 다음과 같이 보입니다 : '.... next =/jobs/tree /', 다음 페이지의 URL이 있음을 의미합니다! (리디렉션의 원인) URL을 위해 sth을해라, 그 다음 = 부분을 가지지 않기 위해? 다시 감사합니다 –

+1

@SpiXel - 개인적으로이 작업을 수행하지는 않았지만 이것을 찾으 셨습니다 : http://stackoverflow.com/questions/10950409/suppress-next-blah-behavior-in-djangos-login -required-decorator 미들웨어 솔루션은 모든 리디렉션에 대해 "다음"을 사용한다고 생각합니다. 그게 네가 원하는지 확신 할 수 없다. 그렇지 않으면 사용자 정의 데코레이터가 최선의 선택 일 수 있습니다. 다시 말하지만, 실제로 이것을 시도하지는 않았지만 작동해야합니다. – themanatuf

3

나는 당신을 위해 무엇을 찾고있는 것은이 답변라고 생각합니다 How can make Django permission_required decorator not to redirect already logged-in users to login page, but display some message

도움이 되었기를 바랍니다.

+0

다운 투표에 대한 자세한 내용은 무엇입니까? 링크 된 답변은 원래 포스터가 요구하는 것과 정확히 일치하는 사용자 정의 데코레이터를 만드는 방법을 보여줍니다. – themanatuf

+0

누군가가 오늘 #django에있는 아래쪽 화살표에서 약간의 방아쇠를 당긴 것 같습니다. 누가 그걸 알지 못합니다. 그냥 무시하십시오 :-) – scytale

관련 문제