POSTデータに従ってユーザーモデルを登録でき、応答に両方を含むサインアップビューを作成しようとしています:
- 作成されたユーザー データ (つまり
{'username': 'foo.bar', 'email': 'test@test.io'}
) - トークン データ (つまり
{'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
ますか? そうするためのより良い方法はありますか?
さらに、これにはセキュリティ上の欠陥がありますか?
ありがとうございました!