2016-06-29 6 views
0

Я новичок в сессиях Django, и я попытался создать файл cookie для входа на свой сайт. Пользователь на моем сайте регистрируется через социальный сайт (в этом случае пара), для этого у меня есть разные функции: Index view, Login, LoginProcess.Django: Правильно Настройка Cookies для входа

Информация:

Index взгляд домашняя страница (127.0.0.1), Login функция перенаправляет пользователя LoginProcess, в этом процессе, я поставил печенье.

request.set_cookie(key='logged', value=True) 

request является примером, что все 3 функции в моем коде, я поставил вошедший ключ к истинному, который должен быть прочитан функцией индекса.

Индекс Функция:

def index(request): 
    if request.COOKIES.get('logged') == True: 
     return HttpResponse("1 - User is logged in") 
    else: 
     return HttpResponse("0 - User is not logged in) 

К сожалению, это вызывает утверждение 0 (Пользователь не авторизован), даже если я вошел в сайт, значение вошедшего ключа None.


Проблема:

Index функция не может обнаружить, что logged печенье был зарегистрирован в LoginProcess функции.

Вопрос:

Я собираюсь сохранить имя пользователя в куки, так что система может определить, какие пользователи данных следует использовать, я знаю, что это очень плохо для клиентской стороны печенья, Какой самый лучший способ делать это?

Как я могу исправить эту проблему? Есть ли лучший способ настроить cookie для входа в систему? Есть ли другой лучший способ настроить сеанс входа в систему?

Итак, как я могу установить cookie в первой функции и получить его значение от второй функции?

Примечание: Нет проблем с аутентификацией, моя основная задача - правильно установить файлы cookie.

+1

Джанго как достаточно полная и расширяемая система Идента ('contrib.auth'), почему бы не использовать его вместо того, чтобы изобретать колесо? –

+0

@brunodesthuilliers, как я упомянул в своем посте, я использую социальную аутентификацию, пользовательская система дает мне больше возможностей и мне легче всего. – ShellRox

+0

Как я уже говорил, вклад.auth'is extensible_ и есть примеры социальной интеграции (даже некоторые подключаемые приложения FWIW). Также учтите, что любое подключаемое приложение, требующее авторизации и/или прав доступа, очень вероятно (это преуменьшение) зависит от 'contrib.auth'. Но если вы действительно любите боль и предпочитаете катиться самостоятельно, вы все равно можете посмотреть, как «contrib.auth» обрабатывает эту часть проблемы. –

ответ

1

Возможно, я все еще читаю его неправильно, но невозможно установить значение в файле cookie запроса.

'WSGIRequest' object has no attribute 'set_cookie' 

но если я предполагаю, что вы имели в виду response.set_cookie(key='logged', value=True) (обратите внимание response), то это работает для меня.

# sets the cookie if not set. 
print request.COOKIES 
if request.COOKIES.get('logged'): 
    return HttpResponse("1 - User is logged in") 
else: 
    response = HttpResponse("0 - User is not logged in") 
    response.set_cookie('logged', True) 
    return response 
+0

У меня был запрос в качестве экземпляра всех функций, это сработало, но я не знаю его основного смысла, спасибо, что исправил меня. Но в этом случае я устанавливаю cookie в другую функцию просмотра ('LoginProcess') и получаю ее значение из функции просмотра« Index ». – ShellRox

+0

Это потому, что вы проверяете '== True', в то время как cookie устанавливается как' 'True'', потому что cookie - это строки? (мой пример не проверяет логическое значение.) – Brian

+0

mine сделал и дал инструкцию else, 'request.COOKIES.get ('logged')' содержит 'None' в этом случае. возможно ли установить cookie в первой функции и получить доступ к нему со второго? – ShellRox

0

Я не entirily уверен ваш вопрос, но если вы хотите установить куки помимо session_id, когда пользователь вошел в систему можно также использовать промежуточное программное обеспечение. Как также предложил здесь:

How to set a login cookie in django?

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