1

POSTデータに従ってユーザーモデルを登録でき、応答に両方を含むサインアップビューを作成しようとしています:

  1. 作成されたユーザー データ (つまり{'username': 'foo.bar', 'email': 'test@test.io'})
  2. トークン データ (つまり{'expires_in': 36000, 'access_token': 'foo', 'scope': 'read write', 'token_type': 'Bearer', 'refresh_token': 'bar'})

そのため、サインアップ後にログインする必要はありません。私はこのviews.pyでそうしようとしています:

import json

from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect

import requests

from rest_framework import permissions, status
from rest_framework.response import Response
from rest_framework.views import APIView

from accounts.serializers import UserSerializer, UserProfileSerializer

class UserProfile(APIView):
    permission_classes = (permissions.AllowAny,)

    def get(self, request, format=None):
        return Response()

    def post(self, request, format=None):
        user_profile = UserProfileSerializer(data=request.data) # data
        if user_profile.is_valid():
            user_profile.save() # returns User instance
            # ask for a token
            r = requests.post('http://myapp.com/auth/token',
                          data = {'client_id': '',
                                  'client_secret': '',
                                  'grant_type': 'password',
                                  'username': user_profile.user.username,
                                  'password': request.data['password']})
            response_dict = json.loads(r.text)
            response_dict['user_profile'] = user_profile.data
            return Response(response_dict, status=status.HTTP_201_CREATED)
        else:
            return Response(user_profile._errors, status=status.HTTP_400_BAD_REQUEST)

client_idただし、プロバイダーの情報を取得する方法がわかりませんclient_secret(oauth2_provider アプリケーションを作成しました)。

my_app = oauth2_provider.models.Application.objects.all()[0]のように取得してから、およびのようmy_app.client_idに取得することになっていmy_app.client_secretますか? そうするためのより良い方法はありますか?

さらに、これにはセキュリティ上の欠陥がありますか?

ありがとうございました!

4

0 に答える 0