2013-10-25 4 views
1

Я пытаюсь выполнить обычную проверку подлинности с помощью django, я написал класс и заполнил его методами authenticate и get_user. Я также добавил эту аутентификацию в файл AUTHENTICATION_BACKENDS в файле settings.py.Django Custom Authentication -

Я вызвал метод аутентификации и следил за ним с помощью логина в моем представлении.

Все, кажется, работает хорошо,

  1. is_authenticated возвращает истину для пользователя после входа в систему,
  2. user.backends набор для моего пользовательского бэкэндом.
  3. SessionID печенье становится установлен в браузере

Но последующие запросы имеют request.user как анонимные, не в состоянии выяснить причину, нужна ваша помощь. Разделяя код ниже, я просто пытаюсь изучить пользовательскую аутентификацию.

views.py

def home(request): 
    if not request.user.is_authenticated(): 
    user=authenticate(username=None,passwd=None,request=request) 
    if not user: 
     return HttpResponse("Login Failed") 
    else: 
     login(request,user) 
     return HttpResponse("Logged in Successfully") 

cusauth.py

class CustomloginBackend: 

    def authenticate(self,username=None,passwd=None,request=None): 
    return self.get_user("praveen.madhavan") 

    def get_user(self,username): 
    try: 
     return User.objects.get(username=username) 
    except Exception as e: 
     return False 

Что может быть проблема?

Благодаря

Praveen.M

+0

Вы нашли решение для этого? – Benjamin

ответ

0

Django использует следующее (от django.contrib.auth.__init__), чтобы войти в систему пользователя и передать его AuthenticationMiddleware установить request.user

SESSION_KEY = '_auth_user_id' 
BACKEND_SESSION_KEY = '_auth_user_backend' 

def get_user(request): 
    from django.contrib.auth.models import AnonymousUser 
    try: 
     user_id = request.session[SESSION_KEY] 
     backend_path = request.session[BACKEND_SESSION_KEY] 
     backend = load_backend(backend_path) 
     user = backend.get_user(user_id) or AnonymousUser() 
    except KeyError: 
     user = AnonymousUser() 
    return user 

Возможно, вы прохождения неправильное значение - backend.get_user, поэтому он не может получить правильный пользователь, поэтому ıit устанавливает AnonymousUser для запроса. Вы можете попробовать отладить, если backend.get_user работает так, как вы ожидали.

+0

Не могли бы вы объяснить, что это за запрос. [BACKEND_SESSION_KEY]? – pravmadh

+0

Ответ обновлен. Код берется из 'django.contrib.auth .__ init __. Py', как я упоминаю его в ответе. Вы можете проверить 'django.contrib.auth.middleware.py' для' AuthenticationMiddleware' и посмотреть, как это работает. – FallenAngel