def get_cached_user(request):
    if not hasattr(request, "_cached_user"):
        try:
            key = CACHE_KEY % request.session[SESSION_KEY]
            user = cache.get(key)
        except KeyError:
            user = AnonymousUser()

        if user is None:
            user = get_user(request)
            user.get_profile()
            try:
                user.social = user.social_auth.all()[0]
            except IndexError:
                user.social = None
            cache.set(key, user)
        request._cached_user = user
    return request._cached_user