2011-06-16 2 views
2

Мы используем пользовательскую аутентификацию для нашего django webapp, где мы попали в компанию ldap. Поскольку мы используем пользовательский бэкэнд, мы, похоже, можем вернуть None или имя пользователя пользователя из нашего db.Как перенаправить с бэкэнда аутентификации Django

def authenticate(self,username,password): 
    """ 
    Authenticate the username credentials, and return the 
    """ 
    try: 
     self.ldap.simple_bind_s(username+"@"+settings.AUTH_LDAP_DOMAIN,password) 
     self.ldap.unbind_s() 

    except ldap.INVALID_CREDENTIALS: 
     logger.debug("Invalid credentials used for login.") 
     username = None 
    except ldap.SERVER_DOWN, e: 
     logger.debug("Ldap server is down.") 
     username = None 

    return username 

Очевидно, что существуют три различных варианта использования здесь - тот, где он работает, тот, где это не потому, что учетные данные недействительны, и тот, где сервер выключен. Пользовательский бэкэнд Django, по-видимому, действительно обрабатывает только два из них: недопустимые учетные данные или рабочие. Как мне перенаправить на страницу с ошибкой или сообщить пользователю, что ldap не работает?

+0

redirect isn; t работает? – cwallenpoole

+0

Что произойдет, если вы повторно установите исключение SERVER_DOWN? Неужели ты не поймаешь это на свой взгляд? – shanyu

ответ

3

Я бы посмотрел на создание пользовательского исключения в вашем архиве и захватил его в вашем браузере. Возврат None из вашего архивного сервера просто означает «Я не могу аутентифицировать эти учетные данные - попробуйте следующий бэкэнд».

Так, в псевдокоде,

class LoginView(TemplateView): 
    def post(self, request): 
     try: 
      user = authenticate(request.POST['username'], request.POST['password']) 
     except MyCustomLdapError: 
      return HttpResponseRedirect('ldap_server_unavailable.html') 
     else: 
      if user: 
       return HttpResponseRedirect('logged_in.html') 
      else: 
       return HttpResponseRedirect('login_failed.html') 

В реальной жизни, вы бы, конечно, использовать форму, чтобы проверить некоторые из этого - но вы получите идею.

Смежные вопросы