Program Tip

Django Rest Framework를 사용하여 로그인 API를 생성하려면 어떻게해야합니까?

programtip 2020. 12. 5. 10:31
반응형

Django Rest Framework를 사용하여 로그인 API를 생성하려면 어떻게해야합니까?


django rest 프레임 워크를 사용하여 로그인 API를 만들고 싶습니다 (또는 이미 미리 번들로 제공되어있는 경우 기존 API를 사용). 그러나 나는 완전히 헤매고 있습니다. django rest 프레임 워크 "login"URL에 게시 요청을 보낼 때마다 검색 가능한 API 템플릿 페이지를 다시 보냅니다.

내 구성

urls.py

url(r'^api/v1/', include('rest_framework.urls', namespace='rest_framework'))

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

내가 원하는 것

의뢰:

POST /api/v1/login  username='name' pass='pass'

응답:

200 OK "{username: 'name', 'userId': '54321'}" set-cookie: sessionid="blahblah"

django-rest-framework-jwt 에서 api보기를 살펴보세요 . 쿠키 세션이 아닌 인증 토큰을 만들기위한 구현이지만 구현은 비슷합니다. views.pyserializers.py를 참조하십시오 . 아마도 serializers.py변경되지 않은 것을 사용할 수 있으며 올바른 매개 변수를 반환하고 세션 쿠키를 설정할 수 있도록 뷰를 조정할 수 있습니다 (인증에서 이미 수행 된 경우 기억할 수 없음).


이와 같은 것을 원한다면 토큰 인증을 사용합니다.

여기에서 토큰 페이지를 확인 하십시오.

이것은 당신이 원하는 것이 아닐 수도 있지만 내가하는 방식은 (모바일 클라이언트의 나머지 API 끝점으로 사용하고 있기 때문에)

내 URL을 할 수 있습니다 localhost:8000/api/users/ -H Authorization : Token 브라우저는 제공된 나머지 프레임 워크 URL에서 생성 한 일반 로그인 페이지를 사용할 수 있습니다.

url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')

'login-less'탐색을위한 토큰을 얻으려면

url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')

그런 다음 전화를 걸면 인증 토큰을 전달할 수 있습니다. 물론 이것이 제가하는 방법이며 아마도 가장 효율적인 방법은 아니지만 제 목표는 사용자에게 브라우저에 대한 세션 인증과 토큰을 통한 모바일 액세스를 제공 할 수있는 방법을 만드는 것이 었습니다.

그런 다음 views.py에서 해당 뷰에 대한 인증 요구 사항을 추가했는지 확인하십시오. 세션 인증 섹션과 거의 동일

permission_classes = (permissions.IsAdminUser,)

또한 포함

authentication_classes = (authentication.TokenAuthentication,)

도움이 되길 바라지 만 그렇지 않다면 검색에 행운을 빕니다.


물론 토큰은 인증하는 좋은 방법이지만 질문자는 세션 인증에 대해 묻습니다.

의뢰:

POST /api/v1/login  username='username' password='password' 
  • 넣어 csrftoken에서 값을 X-CSRFToken헤더에
  • 사용하는 사람이 비록 email이름으로 출원, username이름 매개 변수는 이메일 입력 (예 : 필요합니다 username='sample@domain.com')

응답:

302 FOUND sessionid="blahblah"
  • next값을 지정하지 않으면 자동으로 리디렉션되어 /accounts/profile/404 오류가 발생할 수 있습니다.

뷰 추가 :

from rest_framework_jwt.views import refresh_jwt_token

urlpatterns = [
    ...
    url(r'^rest-auth/', include('rest_auth.urls')),
    url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
    ...
    url(r'^refresh-token/', refresh_jwt_token),
]

참고 URL : https://stackoverflow.com/questions/21317899/how-do-i-create-a-login-api-using-django-rest-framework

반응형