IT-HONGREAT / django_food_project

꾸준히 공부하며 진행하는 사이드 프로젝트입니다.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 가 있기에 가능 했던 것이다.

image

  • 전체적인 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 된다!!!!!