Beispiel #1
0
    def authenticate(self, request, remote_user):
        if not remote_user:
            return
        user = None
        remote_user_data = json.loads(
            request.META.get('HTTP_REMOTE_USER_DATA'))
        user, created = UserModel.objects.get_or_create(
            email=remote_user_data['email'])
        user.username = remote_user
        user.first_name = remote_user_data['first_name']
        user.last_name = remote_user_data['last_name']
        if not hasattr(user, 'profile'):
            profile = UserProfile()
            profile.user = user
        else:
            profile = user.profile
        profile.avatar = remote_user_data['avatar']
        profile.gender = remote_user_data['gender']
        profile.uf = remote_user_data['uf']
        profile.country = remote_user_data['country']
        profile.birthdate = remote_user_data['birthdate']
        profile.save()
        user.save()

        return user
    def process_request(self, request):
        # AuthenticationMiddleware is required so that request.user exists.
        if not hasattr(request, 'user'):
            raise ImproperlyConfigured(
                "The Django remote user auth middleware requires the"
                " authentication middleware to be installed.  Edit your"
                " MIDDLEWARE_CLASSES setting to insert"
                " 'django.contrib.auth.middleware.AuthenticationMiddleware'"
                " before the RemoteUserMiddleware class.")
        try:
            username = request.META[self.header]
        except KeyError:
            return

        # If the user is already authenticated and that user is the user we are
        # getting passed in the headers, then the correct user is already
        # persisted in the session and we don't need to continue.
        if request.user.is_authenticated:
            cleaned_username = self.clean_username(username, request)
            if request.user.get_username() == cleaned_username:
                return
        # We are seeing this user for the first time in this session, attempt
        # to authenticate the user.
        user = auth.authenticate(remote_user=username, request=request)
        if user:
            # User is valid.  Set request.user and persist user in the session
            # by logging the user in.
            user_data = json.loads(request.META['HTTP_REMOTE_USER_DATA'])
            user.first_name = user_data['first_name']
            user.last_name = user_data['last_name']
            user.username = username
            if not hasattr(user, 'profile'):
                profile = UserProfile()
                profile.user = user
            else:
                profile = user.profile
            profile.avatar = user_data['avatar']
            profile.gender = user_data['gender']
            profile.uf = user_data['uf']
            profile.country = user_data['country']
            profile.birthdate = user_data['birthdate']
            profile.save()
            user.save()

            request.user = user
            auth.login(request, user)