Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class register_user_via_facebook(APIView):
- permission_classes = (AllowAny,)
- def post(self, *args, **kwargs):
- try:
- data = dict(self.request.data)
- except Exception as e:
- data = None
- if (not 'accessToken' in data) or (not 'userID' in data):
- return responseError(MISSING_PARAMETERS, MESSAGE_MISSING_PARAMETERS)
- # check if already register
- fbAuth = None
- try:
- fbAuth = FbAuth.objects.get(facebook_id=data['userID'][0])
- except Exception as e:
- pass
- if fbAuth: # return existing user token
- payload = api_settings.JWT_PAYLOAD_HANDLER(fbAuth.user)
- token = api_settings.JWT_ENCODE_HANDLER(payload)
- else:
- # Step 1: Call facebook and verify details. Make sure data is correct.
- profile = facebook.GraphAPI(access_token=data['accessToken']).get_object('me', fields='email,first_name,last_name,gender,picture')
- try:
- email = profile.get('email') or data['email']
- username = profile.get('email') or data['email']
- except Exception as e:
- return responseError(ERROR_FACEBOOK_ACCOUNT_MISSING_EMAIL, MESSAGE_ERROR_FACEBOOK_ACCOUNT_MISSING_EMAIL)
- try:
- first_name = profile.get('first_name') or ''
- except Exception as e:
- pass
- try:
- last_name = profile.get('last_name') or ''
- except Exception as e:
- pass
- password = data['accessToken']
- # Step 2: Store details. Register the user.
- try:
- user = User.objects.create_user(username=username, email=email, password=password, first_name=first_name, last_name=last_name)
- except IntegrityError:
- user = User.objects.get(username=username, email=email)
- FbAuth.create_or_update(user, data['userID'], data['accessToken'])
- user_facebook_avatar_url = profile.get('picture')['data']['url']
- # extra : update userprofile image
- try:
- user_profile = UserProfiles.create_or_update(user=user,
- firstName=first_name,
- lastName=last_name,
- email=email,
- facebook_avatar=user_facebook_avatar_url)
- except Exception as e:
- pass
- # Step 3: Return JWT token in cookie.
- payload = api_settings.JWT_PAYLOAD_HANDLER(user)
- token = api_settings.JWT_ENCODE_HANDLER(payload)
- # Step 4: Set token as cookie
- response = JsonResponse({'token': token}, safe=False, status=status.HTTP_200_OK)
- return response
- class register_user_via_google(APIView):
- permission_classes = (AllowAny,)
- def post(self, *args, **kwargs):
- data = dict(self.request.data)
- if (not 'accessToken' in self.request.POST) or (not 'userID' in self.request.POST):
- return responseError(MISSING_PARAMETERS, MESSAGE_MISSING_PARAMETERS)
- gAuth = None
- try:
- gAuth = GoogleAuth.objects.get(google_id=data['userID'])
- except Exception as e:
- pass
- if gAuth:
- payload = api_settings.JWT_PAYLOAD_HANDLER(gAuth.user)
- token = api_settings.JWT_ENCODE_HANDLER(payload)
- else:
- # Step 1: Call facebook and verify details. Make sure data is correct.
- google_api_userprofile_endpoint = 'https://www.googleapis.com/userinfo/v2/me?fields=id%2C+name%2C+email&key='+GOOGLE_API_KEY
- credentials = AccessTokenCredentials(data['accessToken'][0],'Mozilla/5.0')
- http = httplib2.Http()
- http = credentials.authorize(http)
- response, content = http.request(uri=google_api_userprofile_endpoint)
- profile = json.loads(content)
- if not profile or not profile.get('email'):
- raise APIException(code=status.HTTP_400_BAD_REQUEST)
- username, password, email, first_name = profile.get('email'), data['accessToken'][0], profile.get('email'), profile.get('name')
- # Step 2: Store details. Register the user.
- try:
- user = User.objects.create_user(username=username, email=email, password=password, first_name=first_name)
- except IntegrityError:
- user = User.objects.get(username=username, email=email)
- GoogleAuth.create_or_update(user, data['userID'][0], data['accessToken'][0])
- try:
- user_profile = UserProfiles.create_or_update(user=user,
- firstName=first_name,
- email=email)
- except Exception as e:
- pass
- # Step 3: Return JWT token in cookie.
- payload = api_settings.JWT_PAYLOAD_HANDLER(user)
- token = api_settings.JWT_ENCODE_HANDLER(payload)
- # Step 4: Set token as cookie
- response = JsonResponse({'token': token}, safe=False, status=status.HTTP_200_OK)
- return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement