django의 로그인 기능에 대해서 2021/2/18
10413 단어 장고
1. 인증(Authentication)과 승인(Authorization)의 차이에 대해
인증 ( Authentication )
서비스에 액세스 한 사용자가 「本人であるかどうか」
를 확인합니다.
승인 (Authorization)
서비스에 액세스한 인증된 사용자가 「指定した リソース へ アクセスできるかどうか」
를 제어합니다.
django의 account를 인증되지 않으면 실행할 수 없는 api로 한다(authorization)
viewsets.pyclass AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
permission_classes = [permissions.AllowAny]
permission_classes 라는 필드가 등장했습니다만, Django REST framework 에서는 여기에 Permission 클래스를 설정하는 것으로 액세스권을 설정하도록(듯이) 한다. (여기서 누구나 액세스할 수 있음)
↓
viewsets.pyclass AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
permission_classes = [permissions.IsAuthenticated]
permission_classes에 IsAuthenticated를 지정했습니다. 이것으로 인증이 끝나지 않으면 실행할 수 없는 API로 할 수 있었다.
그러면 ,,
이제 무사히 보안 레벨을 올릴 수 있었습니다!
여기에서는 액세스하기 위해서는 token을 등록할 필요가 있지만 그 Authenticate의 설정 방법은 setting.py
로 관리할 수 있다.
setting.pyREST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication'
]
}
여기에서는 토큰으로 액세스 할 수 있도록하고 싶기 때문에 'rest_framework.authentication.TokenAuthentication'
를 추가했다.
토큰 작성 및 취득 방법
1. 사용자 얻기
터미널account = Account.objects.filter(id=14).first()
<output> < Account: 14>
account.user
<output> <User: 'ユーザー名'>
2.Token을 작성·취득한다
토큰을 만드는 방법
터미널from rest_framework.authtoken.models import Token
token = Token.objects.create(user=...)
#取得の時はcreate→getに変える
print(token.key)
자세한 내용은 django rest framework 문서를 참조하십시오.
htps //w w. d 짱 고레 st-f 라메를 rk. 오 rg / 아피 구이 / 아우테 펜치 카치 온 /
get_queryset 함수
AuthToken으로 보안을 올렸지만, 이대로라면 토큰을 취득해 한 번 로그인해 버리면 어느 Account의 정보도 취득할 수 버리므로 get_queryset 함수를 오버라이드(override) 한다
get_queryset이란?
get_queryset 메서드는 주로 ListView에서 사용되지만 모델 인스턴스 목록을 반환하는 메서드입니다. 예를 들어 filter 메소드로 좁히거나 유연하게 목록을 얻고 싶다면 get_queryset 메소드를 덮어 쓰고 그렇게 작성하십시오.
viewsets.pyclass AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
# permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
queryset = self.queryset.filter(user=self.request.user)
return queryset
쿼리 세트 얻기 get_queryset 재정의
to_representation 함수
하고 싶은 일
Account 모델의 필드에 토큰을 추가하고 싶습니다.
serializers def to_representation(self, value)
output = super().to_representation(value)
print(output)
#ターミナル上で確認する
return output
#ポストマンで確認する
↓
output의 사전 형식에 token이라는 키 추가
위의 코드로 표시된 value는 account 객체의 내용과 같기 때문에 그 안에 토큰의 key와 value를 추가한다
우선, value 오브젝트의 형태를 확인하기 위해서print(type(value))
사용하기
type()이란 객체의 형태를 취득, 확인
print(type('string'))
serializars.py def to_representation(self, account):
print("hogehoge", type(account))
output = super().to_representation(account)
token = Token.objects.filter(user=account.user).first()
if not token:
token = Token.objects.create(user=account.user)
output['token'] = token.key
print(output)
return output
Django REST Framework : 하나의 APIView에서 요청 메소드마다 permission_classes를 분리합니다.
하고 싶은 일
POST시 IsAuthentication을 제거하고 싶습니다. 왜냐하면 계정이 없을 때 토큰을 만들 수 없기 때문입니다.
viewsets.py def get_permissions(self):
if self.request.method == 'POST':
return []
else:
return [permissions.IsAuthenticated()]
이렇게 함으로써, post 메소드의 때는 퍼미션이 필요없고, get 메소드등의 때는 IsAuthenticated를 퍼미션으로서 채용할 수 있다.
Reference
이 문제에 관하여(django의 로그인 기능에 대해서 2021/2/18), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/1999-07-08/items/2d03270069e71d1d2276
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
viewsets.py
class AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
permission_classes = [permissions.AllowAny]
permission_classes 라는 필드가 등장했습니다만, Django REST framework 에서는 여기에 Permission 클래스를 설정하는 것으로 액세스권을 설정하도록(듯이) 한다. (여기서 누구나 액세스할 수 있음)
↓
viewsets.py
class AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
permission_classes = [permissions.IsAuthenticated]
permission_classes에 IsAuthenticated를 지정했습니다. 이것으로 인증이 끝나지 않으면 실행할 수 없는 API로 할 수 있었다.
그러면 ,,
이제 무사히 보안 레벨을 올릴 수 있었습니다!
여기에서는 액세스하기 위해서는 token을 등록할 필요가 있지만 그 Authenticate의 설정 방법은
setting.py
로 관리할 수 있다.setting.py
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication'
]
}
여기에서는 토큰으로 액세스 할 수 있도록하고 싶기 때문에
'rest_framework.authentication.TokenAuthentication'
를 추가했다.토큰 작성 및 취득 방법
1. 사용자 얻기
터미널account = Account.objects.filter(id=14).first()
<output> < Account: 14>
account.user
<output> <User: 'ユーザー名'>
2.Token을 작성·취득한다
토큰을 만드는 방법
터미널from rest_framework.authtoken.models import Token
token = Token.objects.create(user=...)
#取得の時はcreate→getに変える
print(token.key)
자세한 내용은 django rest framework 문서를 참조하십시오.
htps //w w. d 짱 고레 st-f 라메를 rk. 오 rg / 아피 구이 / 아우테 펜치 카치 온 /
get_queryset 함수
AuthToken으로 보안을 올렸지만, 이대로라면 토큰을 취득해 한 번 로그인해 버리면 어느 Account의 정보도 취득할 수 버리므로 get_queryset 함수를 오버라이드(override) 한다
get_queryset이란?
get_queryset 메서드는 주로 ListView에서 사용되지만 모델 인스턴스 목록을 반환하는 메서드입니다. 예를 들어 filter 메소드로 좁히거나 유연하게 목록을 얻고 싶다면 get_queryset 메소드를 덮어 쓰고 그렇게 작성하십시오.
viewsets.pyclass AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
# permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
queryset = self.queryset.filter(user=self.request.user)
return queryset
쿼리 세트 얻기 get_queryset 재정의
to_representation 함수
하고 싶은 일
Account 모델의 필드에 토큰을 추가하고 싶습니다.
serializers def to_representation(self, value)
output = super().to_representation(value)
print(output)
#ターミナル上で確認する
return output
#ポストマンで確認する
↓
output의 사전 형식에 token이라는 키 추가
위의 코드로 표시된 value는 account 객체의 내용과 같기 때문에 그 안에 토큰의 key와 value를 추가한다
우선, value 오브젝트의 형태를 확인하기 위해서print(type(value))
사용하기
type()이란 객체의 형태를 취득, 확인
print(type('string'))
serializars.py def to_representation(self, account):
print("hogehoge", type(account))
output = super().to_representation(account)
token = Token.objects.filter(user=account.user).first()
if not token:
token = Token.objects.create(user=account.user)
output['token'] = token.key
print(output)
return output
Django REST Framework : 하나의 APIView에서 요청 메소드마다 permission_classes를 분리합니다.
하고 싶은 일
POST시 IsAuthentication을 제거하고 싶습니다. 왜냐하면 계정이 없을 때 토큰을 만들 수 없기 때문입니다.
viewsets.py def get_permissions(self):
if self.request.method == 'POST':
return []
else:
return [permissions.IsAuthenticated()]
이렇게 함으로써, post 메소드의 때는 퍼미션이 필요없고, get 메소드등의 때는 IsAuthenticated를 퍼미션으로서 채용할 수 있다.
Reference
이 문제에 관하여(django의 로그인 기능에 대해서 2021/2/18), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/1999-07-08/items/2d03270069e71d1d2276
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
account = Account.objects.filter(id=14).first()
<output> < Account: 14>
account.user
<output> <User: 'ユーザー名'>
from rest_framework.authtoken.models import Token
token = Token.objects.create(user=...)
#取得の時はcreate→getに変える
print(token.key)
AuthToken으로 보안을 올렸지만, 이대로라면 토큰을 취득해 한 번 로그인해 버리면 어느 Account의 정보도 취득할 수 버리므로 get_queryset 함수를 오버라이드(override) 한다
get_queryset이란?
get_queryset 메서드는 주로 ListView에서 사용되지만 모델 인스턴스 목록을 반환하는 메서드입니다. 예를 들어 filter 메소드로 좁히거나 유연하게 목록을 얻고 싶다면 get_queryset 메소드를 덮어 쓰고 그렇게 작성하십시오.
viewsets.py
class AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
# permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
queryset = self.queryset.filter(user=self.request.user)
return queryset
쿼리 세트 얻기 get_queryset 재정의
to_representation 함수
하고 싶은 일
Account 모델의 필드에 토큰을 추가하고 싶습니다.
serializers def to_representation(self, value)
output = super().to_representation(value)
print(output)
#ターミナル上で確認する
return output
#ポストマンで確認する
↓
output의 사전 형식에 token이라는 키 추가
위의 코드로 표시된 value는 account 객체의 내용과 같기 때문에 그 안에 토큰의 key와 value를 추가한다
우선, value 오브젝트의 형태를 확인하기 위해서print(type(value))
사용하기
type()이란 객체의 형태를 취득, 확인
print(type('string'))
serializars.py def to_representation(self, account):
print("hogehoge", type(account))
output = super().to_representation(account)
token = Token.objects.filter(user=account.user).first()
if not token:
token = Token.objects.create(user=account.user)
output['token'] = token.key
print(output)
return output
Django REST Framework : 하나의 APIView에서 요청 메소드마다 permission_classes를 분리합니다.
하고 싶은 일
POST시 IsAuthentication을 제거하고 싶습니다. 왜냐하면 계정이 없을 때 토큰을 만들 수 없기 때문입니다.
viewsets.py def get_permissions(self):
if self.request.method == 'POST':
return []
else:
return [permissions.IsAuthenticated()]
이렇게 함으로써, post 메소드의 때는 퍼미션이 필요없고, get 메소드등의 때는 IsAuthenticated를 퍼미션으로서 채용할 수 있다.
Reference
이 문제에 관하여(django의 로그인 기능에 대해서 2021/2/18), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/1999-07-08/items/2d03270069e71d1d2276
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def to_representation(self, value)
output = super().to_representation(value)
print(output)
#ターミナル上で確認する
return output
#ポストマンで確認する
serializars.py
def to_representation(self, account):
print("hogehoge", type(account))
output = super().to_representation(account)
token = Token.objects.filter(user=account.user).first()
if not token:
token = Token.objects.create(user=account.user)
output['token'] = token.key
print(output)
return output
Django REST Framework : 하나의 APIView에서 요청 메소드마다 permission_classes를 분리합니다.
하고 싶은 일
POST시 IsAuthentication을 제거하고 싶습니다. 왜냐하면 계정이 없을 때 토큰을 만들 수 없기 때문입니다.
viewsets.py def get_permissions(self):
if self.request.method == 'POST':
return []
else:
return [permissions.IsAuthenticated()]
이렇게 함으로써, post 메소드의 때는 퍼미션이 필요없고, get 메소드등의 때는 IsAuthenticated를 퍼미션으로서 채용할 수 있다.
Reference
이 문제에 관하여(django의 로그인 기능에 대해서 2021/2/18), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/1999-07-08/items/2d03270069e71d1d2276
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
POST시 IsAuthentication을 제거하고 싶습니다. 왜냐하면 계정이 없을 때 토큰을 만들 수 없기 때문입니다.
viewsets.py
def get_permissions(self):
if self.request.method == 'POST':
return []
else:
return [permissions.IsAuthenticated()]
이렇게 함으로써, post 메소드의 때는 퍼미션이 필요없고, get 메소드등의 때는 IsAuthenticated를 퍼미션으로서 채용할 수 있다.
Reference
이 문제에 관하여(django의 로그인 기능에 대해서 2021/2/18), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/1999-07-08/items/2d03270069e71d1d2276텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)