1
1

According to http://docs.djangoproject.com/en/dev/howto/auth-remote-user/

you can automatically create and login a user simply by setting the username in the HTTP variable REMOTE_USER and making the following modifications (the bold text is what I've added):

In settings.py:
...
...

MIDDLEWARE_CLASSES = [
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'forum.middleware.extended_user.ExtendedUser',
    'forum.middleware.anon_user.ConnectToSessionMessagesMiddleware',
    'forum.middleware.request_utils.RequestUtils',
    'forum.middleware.cancel.CancelActionMiddleware',
    'forum.middleware.admin_messages.AdminMessagesMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.RemoteUserMiddleware',
]
...
...
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.RemoteUserBackend',]

OSQA/Django is not creating and logging in the user. Am I missing something?

I know that the HTTP variable REMOTE_USER is actually set because it appears in log/django.osqa.log.

asked 21 Apr '11, 05:37

yonas's gravatar image

yonas
31134
accept rate: 0%

Things went further along when I changed REMOTE_USER to HTTP_ REMOTE_ USER.

(21 Apr '11, 05:59) yonas

The user is created in the auth_user table, and has no email, no password, is_active = 1.

I get this error, though:

        EXCEPTION INFO:
                Traceback (most recent call last):
          File "/opt/ActivePython-2.7/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
            response = callback(request, *callback_args, **callback_kwargs)
          File "/opt/OSQA/forum/modules/decorators.py", line 95, in decorated
            return decoratable(*args, **kwargs)
          File "/opt/OSQA/forum/modules/decorators.py", line 55, in __call__
            res = self._callable(*args, **kwargs)
          File "/opt/OSQA/forum/views/readers.py", line 89, in index
            paginator_context=paginator_context)
          File "/opt/OSQA/forum/views/readers.py", line 167, in question_list
            questions = questions.filter(~Q(tags__id__in = request.user.marked_tags.filter(user_selections__reason = 'bad')))
        AttributeError: 'User' object has no attribute 'marked_tags'
(21 Apr '11, 06:02) yonas

Good news, I got quite for now by changing the ordering of MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = [
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.RemoteUserMiddleware',
    'django.middleware.common.CommonMiddleware',
    'forum.middleware.extended_user.ExtendedUser',
    'forum.middleware.anon_user.ConnectToSessionMessagesMiddleware',
    'forum.middleware.request_utils.RequestUtils',
    'forum.middleware.cancel.CancelActionMiddleware',
    'forum.middleware.admin_messages.AdminMessagesMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
] 
(21 Apr '11, 06:34) yonas

Django will automatically create users in the database if the user doesn't exist.

Django will login users that have been created using the signup page.

OSQA will not login users that have been automatically created.

How do I create the appropriate entries in forum_user and forum_subscriptionsettings ?

(21 Apr '11, 09:49) yonas

The last piece of the puzzle, using helpful hint from http://meta.osqa.net/questions/5508/integration-with-existing-django-installation-how-to-deal-with-existing-users

In forum/middleware/extended_user.py:

from django.contrib.auth.middleware import AuthenticationMiddleware from django.contrib.auth import logout, authenticate, login from forum.models.user import User, AnonymousUser from forum.views.auth import forward_suspended_user, login_and_forward import logging

class ExtendedUser(AuthenticationMiddleware): def process_request(self, request): super(ExtendedUser, self).process_request(request) if request.user.is_authenticated(): try: request.user = request.user.user

            if request.user.is_suspended():
                user = request.user
                logout(request)
                return forward_suspended_user(request, user)

return None

except User.DoesNotExist:
            osqa_user = User(username=request.META['HTTP_REMOTE_USER'], email=request.META['HTTP_REMOTE_EMAIL'], user_ptr_id=request.user.pk)
            osqa_user.save()
            request.user = osqa_user
            return None

except Exception, e:
            import traceback
            logging.error("Unable to convert auth_user %s to forum_user: \\n%s" % (
                            request.user.id, traceback.format_exc()
            ))
            return None

request.user = AnonymousUser()
    return None
link

answered 21 Apr '11, 20:42

yonas's gravatar image

yonas
31134
accept rate: 0%

edited 21 Apr '11, 21:41

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×45
×32
×1
×1

Asked: 21 Apr '11, 05:37

Seen: 3,410 times

Last updated: 21 Apr '11, 21:41

powered by OSQA