티스토리 뷰
[1] DRF가 지원해주는 Authentication 종류
Django Rest Framework - Authentication 을 보면
이렇게 네가지의 Authentication을 지원해주고 있습니다.
Basic은 username이랑 password로 인증하는데 테스트에서만 적절하다라고 나와있고
Token은 token으로 인증하는데, 클라이언트 - 서버 setup에 적절하다고 하고 (저는 이거 쓰겠습니다..!)
Session은 AJAX client(뭔지모름ㅠㅠ)에게 적절하다고 하고
Remote는 무슨 말인지 모르겠어요ㅠㅠ
[2] TokenAuthentication 설치하기
이미 rest_framework 패키지를 설치했으니까
settigs.py에 가서 앱만 추가해주면 됩니다.
그리고 아래 명령어를 해줍니다.
python manage.py migrate
여기보면 저 명령어를 하면 rest_framework.authtoken이 DB 마이그레이션을 할꺼다~~ 라고 하네요
돌려보면 이렇게 나옵니다.
[3] 장고의 User 모델 확장하기
그리고 이런식으로 토큰을 만들 수 있는데
create할때 들어가는 user는 장고에 기본적으로 있는 User모델이라고 합니다.
저는 이렇게 User 모델을 기존에 따로 만들어줬어가지구,,
장고 User모델을 확장하는 모델로 바꿀게요!!
여러가지 User모델 확장 방법이 있는데요 (참고: User 모델의 확장 기법 비교 / django login 유저 확장 방법 )
기존 User 모델과 OneToOneField로 일대일관계를 맺는 Django 모델을 추가해서 사용자에 관한 정보를 저장하는 방법을 선택했습니다...!!!
(Django의 인증 시스템을 그대로 활용 & 커스텀 사용자 정보 필드를 저장하고자 할 때 사용하는 기법입니다)
이렇게 Profile모델을 만들어줬습니다.
마이그레이션도 진행해줍니다.
python manage.py makemigrations
python manage.py migrate
[4] 회원가입 API 만들기
아래처럼 Signup뷰를 하나 만들어줍니다.
장고의 User 모델에서는 username이 필수 & 유니크한 값으로 id같은 것이랍니다.
urls.py에 urlpatterns를 추가해주는 것도 잊지 마세요-!!
저는 account라는 앱을 만들고 여기서 작업해줘서
localhost:8000/account/signup/ 이라는 url로 접속하면 회원가입이 진행되게 됩니다.
이렇게 회원가입 api를 부르면 Token을 잘 내려주는 것을 확인했습니다!+!
그리고 admin페이지에 들어가볼게요
저도 자주 깜박하는데 admin.py에 모델을 등록해야지 해당 테이블이 admin 홈페이지에서 보인답니다!+!
우선 User 테이블을 보면
슈퍼유저인 저와
제가 방금추가한 jordy와 pooh가 잘들어가있고
Tokens에 가보면
각 사용자마다 토큰 발급된게 있고
Profiles에도 죠르디랑 푸가 잘들어가있네요
[5] API요청이 오면 토큰을 보고 유저가 누군지 식별하기
이것도 DRF에서 제공해주는 데요,
클라이언트에서 HTTPHeader에 다음과 같이
Authorization: Token 토큰값
을 보내주면 request.user (장고의 User인스턴스) 또는 request.auth (Token인스턴스) 로 사용자를 식별할 수 있어요-!
우선 프로젝트의 settings.py에 가셔서 DRF의 인증방법 중 어떤 것을 쓰는지 글로벌하게 명시해줘야해요
저는 installed_app 밑에 추가하였어요-!
그 다음에
옛날에 만들어둔 APIView에 가서
request.user 랑
request.auth를 프린트해볼게요-!!
그리고 아까 회원가입할때 얻었던 토큰을 header에 넣어주면
request.user에 pooh라고 잘나오네요
토큰도 잘나옵니다!
이제 죠르디 토큰으로 요청 해볼게요
request.user로 사용자를 식별해서
사용자에게 맞는 데이터를 내려주면 되겠네요-!!
[6] 로그인 api도 구현해주기
SignupView 밑에 LoginView를 만들어주었습니다.
장고 User모델의 password가 자동으로 암호화되어서 DB에 저장되기때문에
Using the Django authentication system 문서에 나오는 authenticate 메소드를 사용하여 User를 찾아야해요-!
urlpattern도 추가했습니다.
(참고로 as_view 굳이 안해도 되는데 이거 해야지 디버깅할때 더 자세한 정보가 나오더라구요,,)
로그인할때도 토큰주도록 했습니다,,!
www.django-rest-framework.org/api-guide/exceptions/#exception-handling-in-rest-framework-views
예외처리 문서가 어려워서 자세한 예외처리는 아직 못했습니다ㅠㅠ
궁금쓰
장고는 Password를 암호화해서 DB에 저장하기때문에
내가 admin이라고 해도 내 비밀번호조차도 스스로 볼 수 없다!!
근데 Token은 암호화안하고 바로 저장하고 보여준다.
Token은 암호화안해도 되는걸까,,?! 그리고 admin이 전체 사용자의 토큰을 모두 볼 수 있어도 되는걸까,,?!
Reference
yonghyunlee.gitlab.io/python/user-extend/
www.django-rest-framework.org/api-guide/authentication/
'🐍 > DRF' 카테고리의 다른 글
[DRF] SerializerMethodField로 모델에서 변형된 JSON을 내려주기 (0) | 2020.09.26 |
---|---|
[DRF] 기본 Exception과 APIExecption (0) | 2020.09.24 |
[Heroku] Heroku로 장고 API 배포하기 (0) | 2020.09.15 |
[DRF] ERD(Entity–relationship model) 그리기 & 모델 만들기 (0) | 2020.09.13 |
[PythonAnywhere] 장고 admin 페이지 CSS가 안먹을때 (0) | 2020.09.13 |
- Total
- Today
- Yesterday
- ribs
- flutter dynamic link
- Flutter 로딩
- Django Firebase Cloud Messaging
- DRF APIException
- 구글 Geocoding API
- Django FCM
- 플러터 얼럿
- METAL
- Sketch 누끼
- flutter build mode
- ipad multitasking
- PencilKit
- Watch App for iOS App vs Watch App
- Python Type Hint
- 플러터 싱글톤
- Flutter getter setter
- 장고 URL querystring
- drf custom error
- cocoapod
- 장고 Custom Management Command
- Flutter Text Gradient
- Flutter Spacer
- Flutter Clipboard
- Django Heroku Scheduler
- Dart Factory
- SerializerMethodField
- flutter 앱 출시
- flutter deep link
- github actions
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |