私はDjango Rest Framework 3.12.2とdjango.contrib.authでDjango 3.2を使用しています。コマンドラインでいくつかのスーパーユーザーを作成しました
python manage.py createsuperuser --username=joe --email=joe@example.com
これにより、移行によって自動生成される「auth_user」テーブルにエントリが作成されます。django.contrib.auth メソッド呼び出しを使用して認証後にユーザーを検索する方法に興味があります。ユーザーにログインしてJWTを発行するために使用するこのシリアライザーがあります
class UserLoginSerializer(serializers.Serializer):
username = serializers.CharField(max_length=255)
password = serializers.CharField(max_length=128, write_only=True)
token = serializers.CharField(max_length=255, read_only=True)
def validate(self, data):
username = data.get("username", None)
password = data.get("password", None)
user = authenticate(username=username, password=password)
if user is None:
raise serializers.ValidationError(
'A user with this email and password is not found.'
)
try:
payload = JWT_PAYLOAD_HANDLER(user)
jwt_token = JWT_ENCODE_HANDLER(payload)
update_last_login(None, user)
except User.DoesNotExist:
raise serializers.ValidationError(
'User with given email and password does not exists'
)
return {
'username':user.username,
'token': jwt_token
}
auth_user テーブルからユーザーに関する情報を検索できるエンドポイントが必要です。
class UserProfileView(RetrieveAPIView):
permission_classes = (IsAuthenticated,)
authentication_class = JSONWebTokenAuthentication
def get(self, request):
try:
token = get_authorization_header(request).decode('utf-8')
if token is None or token == "null" or token.strip() == "":
raise exceptions.AuthenticationFailed('Authorization Header or Token is missing on Request Headers')
decoded = jwt.decode(token, settings.SECRET_KEY)
username = decoded['username']
# how to lookup the user at this point?
status_code = status.HTTP_200_OK
response = {
'success': 'true',
'status code': status_code,
'message': 'User profile fetched successfully',
'data': {
#...
}
}
ユーザー名を取得した後、auth.contrib モジュールを使用してデータベースでユーザーを検索する適切な方法は何ですか?