profile 설정과 페이지 이용권한의 조건
IT-HONGREAT opened this issue · comments
What??
닉네임 등의 profile 설정을 진행한 user가 페이지를 이용할 수 있는 로직구현
URL과 상관없이 로그인을 한 유저가 profile설정을 하지않았다면 그에 대한 페이지로 redirect되게 한다!
Why??
현재 상황 user가 signup을 진행하고 profile을 설정하게 됨.
profile설정 도중 페이지를 이탈하거나 설정을 채 완료하지 못하는 경우가 있을 수 있다. (거의 없겠지만..)
이런 경우를 방지하고 profile을 갖추고 이용을 할 수 있게 끔 로직을 구현
To-do List
- 현재 로직을 이해한다
- 필요한 기능을 탐색한다. (공식문서 등)
- 구현한다
middleware
redhat의 토픽_미들웨어(Middleware): 개념, 종류, 비교, 구성 요소, 툴, 장점
middleware 전반적인 개념이므로 알아두면 좋겠다
-
미들웨어는 request와 response 의 Cycle을 제어한다.
-
모든 request는 URL Dispatcher에 도착하기 전에 항상 middleware를 통과하게 된다.
- request ⇒ [middleware] ⇒ [URL Dispatcher] ⇒...⇒response
- 이 때, middleware의 조건에 따라서 다음으로 전달할지(이때 그냥 전달하는 것 뿐이 아닌 request, response를 프로세싱할 수 있다), 바로 response할지 정해진다.
-
mixin은 view에만 적용된다.
-
이미 django의 setting에 middleware를 다루는 곳이 있다.
view에서 현재 user를 request.user로 접근할 수 있었던 이유가 AuthenticationMiddleware 가 있기에 가능 했던 것이다.
- 전체적인 request에 대한 로직은 middleware로 구현이 된다.
Django Settings의 Middleware 순서
-
request : 위에서 아래 로직으로 동작
-
response : 아래부터 위로 동작
-
이 때 조건에 부합하지않다면 다음 Middleware로 넘어가지 않고 바로 response된다!!!!!
-
Middleware 공식문서
Middleware | Django documentation | Django
-
위 공식문서를 참고하여 ProfileSetupMiddleware를 구현했다.
이 때 request.user를 참고하기 때문에, 위에 언급한 auth관련 middleware이후에 profile관련 middleware를 넣어줘야한다. -
path에 관련하여 path_info 메소드를 알게되었다.(아래 매우 자세히 정리 해놓으신 정보들)
“일부 웹 서버 구성에서 호스트 이름 뒤에있는 URL 부분은 스크립트 접두사 부분과 경로 정보 부분으로 나뉩니다.
path_info 속성은 사용중인 웹 서버에 관계없이 항상 경로의 경로 정보 부분을 포함합니다.
경로 대신이 옵션을 사용하면 테스트 서버와 배포 서버간에 코드를보다 쉽게 이동할 수 있습니다.”
- 따라서 이런코드가 도출되었고, 이는 조건문속에서 활용되어 reverse 된 profile-set url이 같지 않는 조건으로 활용한다.
request.path_info != reverse("profile-set")
결과
Profile setting이 되지 않은 user로 로그인을 하여 다른 페이지를 이동하려고 했으나,기가막힐 정도로 profile set 페이지로 잘 redirect 된다!!!!!