auth_utils.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:montage 作者: storyful 项目源码 文件源码
def auth_user(fn):
    """
        Decorator to force user to be logged in with GAE
    """
    @functools.wraps(fn)
    def _wrapped(request, *args, **kwargs):
        temp_request = request
        bearer = request.META['HTTP_AUTHORIZATION']
        url = "https://www.googleapis.com/userinfo/v2/me"
        result = urlfetch.fetch(url=url,
            method=urlfetch.GET,
            headers={"Authorization" : bearer})
        contents = json.loads(result.content)
        gae_user = users.get_current_user()
        is_admin = users.is_current_user_admin()

        User = get_user_model()
        django_user = None
        try:
            logging.debug("Getting django user")
            django_user = User.objects.get(
                email=contents['email'])
        except User.DoesNotExist:
            logging.info("User does not exist in Montage. Checking pending users")
            try:
                pending_user = PendingUser.objects.get(
                    email=contents['email'])
            except PendingUser.DoesNotExist:
                logging.info("No pending user record for this email")
                user, created = get_user_model().objects.get_or_create(
                    email=email,
                    defaults={
                        'username': email.split('@')[0],
                        'is_active': True
                    }
                )
                return user
            else:
                logging.info("Pending user record found. Activating user.")
                django_user = activate_pending_user(
                    pending_user, gae_user, is_admin)
        except AttributeError:
            return HttpResponseForbidden()

        else:
            logging.info("User found. Updating gaia_id and superuser status")
            request = temp_request
            # update_user(django_user, is_admin)

        if django_user:
            request.user = django_user
        else:
            return HttpResponseForbidden()

        return fn(request, *args, **kwargs)
    return _wrapped
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号