Django Auth, вопрос для входа - PullRequest
       9

Django Auth, вопрос для входа

2 голосов
/ 09 августа 2011

Уточнение вопроса: Я пытаюсь проверить, проходит ли аутентификация пользователя для каждого запроса страницы.

Я впервые пытаюсь использовать Аутентификацию в Django иЯ не понимаю, как представление входа в систему должно обрабатывать аутентификации.

Когда я использую @login_required, я перенаправляю на «/ login», чтобы проверить, вошел ли пользователь в систему и, если нет, отобразить имя входастр.Однако попытка перенаправить обратно на исходную страницу вызывает бесконечный цикл, потому что он снова и снова отправляет меня на страницу входа.

Я явно не понимаю, как должен работать @login_required, но яЯ не уверен, что мне не хватает.Некоторое время я искал пример, но все используют значение по умолчанию @login_required без параметра login_url.

Так, например ... страница, к которой я пытаюсь получить доступ, будет ...

@login_required(login_url='/login')
def index(request):

И тогда мой вход в систему будет .. (очевидно, неполным) ..

Редактировать: просто отметить ... переменные сеанса устанавливаются в другом представлении

def login(request):
    if '_auth_user_id' in request.session:

        # just for testing purposes.. to make sure the id is being set
        print "id:",request.session['_auth_user_id']

        try:
            user = Users.objects.get(id=request.session['_auth_user_id'])
        except:
            raise Exception("Invalid UserID")

        # TODO: Check the backend session key

        # this is what I'm having trouble with.. I'm not sure how
        # to redirect back to the proper view
        return redirect('/')
    else:
        form = LoginForm()

        return render_to_response('login.html',
            {'form':form},
            context_instance=RequestContext(request)
        )

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Ну, как вы говорите, очевидно, что это не сработает, потому что это неполно.Итак, пока вы не завершите его, вы получите бесконечный цикл - потому что вы не написали код, который помещает _auth_user_id в request.session.

Но я действительно не знаю, почему выДелаем этот тест в первую очередь.Документация auth содержит прекрасный пример того, как написать представление входа в систему: получить имя пользователя и пароль из формы, отправить их на authenticate, чтобы получить объект пользователя, а затем передать их на login... готово.

Редактировать Я думаю Я мог бы увидеть, где ваше замешательство.Декоратор login_required сам проверяет, вошел ли пользователь в систему - это именно то, для чего он предназначен.Вам не нужно писать какой-либо код для этого.Ваша задача - написать код, который фактически регистрирует пользователя, вызывая authenticate и login.

1 голос
/ 09 августа 2011

Попробуйте позвонить в логин (), смотрите следующее пожалуйста:

https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login

...