예제 #1
0
def api_login():
    """
    This endpoint receives a POST request from client-side login
    It performs validation of the returned token, creates
    a new account if needed, and logs the user in
    """
    # request.json.keys()  -->  [u'expiresIn', u'userID', u'signedRequest', u'accessToken']
    user_id = request.json['userID']
    provider = 'facebook'
    app.logger.debug('Received signed request from user %s' % user_id)
    parsed_request = parse_signed_request(request.json['signedRequest'], app.config['FB_APP_SECRET'])
    if parsed_request:
        # The request was good, is this a new user?
        try:
            user = User.objects.get(id=user_id)
            new_user = False
            signal = user_logged_in

        except DoesNotExist:
            # Create an account for the user
            user = User(id=user_id)
            new_user = True
            signal = user_created

        # Save the access token
        token = AccessToken(
            provider=provider,
            access_token=request.json['accessToken'],
        )
        user.access_tokens.append(token)
        user.save()

        # Log the user in
        login_user(user)

        # Run the signal handler. If new user, this will pull their profile
        signal.send(current_app._get_current_object(), user_id=user_id, provider=provider)

        # Return success
        return Response(json.dumps({'new_user': new_user}), status=201, mimetype='application/json')
    else:
        # The request failed to validate: log an error and return http 400
        app.logger.warning('Signed request failed to validate, user %s' % user_id)
        return Response(json.dumps({
            'status': 'error',
            'message': 'Signed request failed to authenticate'
        }), status=400, mimetype='application/json')
예제 #2
0
 def get_friend_ids_in_app(self):
     # Need to return `friends` that have a User document
     friend_ids = self.get_matching_friends().scalar('uid')
     # User models having those ids
     return User.objects(id__in=friend_ids).sclar('id')
예제 #3
0
파일: sup.py 프로젝트: bcattle/monkeybook2
from monkeybook.tasks import RunFqlTask
from monkeybook.models import User
from monkeybook.fql.profile import ProfileFieldsTask, FamilyTask, SquareProfilePicTask
u = User.objects()[0]
rft = RunFqlTask()