Найти - Пользователи
Полная версия: Проблема с авторизацией пользователя.
Начало » Django » Проблема с авторизацией пользователя.
1 2 3
neri
Какая-то ошибка с авторизацией. Ввожу логин и пароль, меня редиректит на главную страницу, как и нужно, но авторизация не происходит.

Вот мой код:

settings.py
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
   "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
)

views.py
from django.shortcuts import render_to_response, redirect
from django.contrib import auth
from django.core.context_processors import csrf
def mylogin(request):
    args = {}
    args.update(csrf(request))
    if request.POST:
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = auth.authenticate(username=username, password=password)
        if user is not None:
                auth.login(request, user)
                return redirect('/')
        else:
            args['login_error'] = "Пользователь не найден"
            return render_to_response('loginsys/login.html', args)
    else:
        return render_to_response('loginsys/login.html', args)
шаблон
{% if user.is_authenticated %}
    <li><a class="navbar-brand" href="/auth/logout/">Выйти <strong>{{ user.username }}</strong>.</a></li>
{% else %}
    <li><a class="navbar-brand" href="/auth/login/">Войти</a></li>
{% endif %}

loginsys.urls.py
from django.conf.urls import patterns, url
from loginsys.views import mylogin
urlpatterns = patterns('',
    url(r'^login/$', mylogin),
)

urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin


urlpatterns = patterns('',

url(r'^admin/', include(admin.site.urls)),
url(r'^auth/', include('loginsys.urls')),
)
Делаю вроде все как в документации, никак не могу понять в чем ошибка.
FishHook
urls.py покажите
neri
urls.py
from django.conf.urls import patterns, url
from loginsys.views import mylogin
urlpatterns = patterns('',
    url(r'^login/$', mylogin),
)
inoks
надо еще
'django.contrib.sessions.middleware.SessionMiddleware'

https://docs.djangoproject.com/en/1.8/topics/auth/default/#authentication-in-web-requests
neri
'django.contrib.sessions.middleware.SessionMiddleware' - есть. Выложил просто не все настройки.
Подредактировал первый пост, включив в него все настройки и файлы urls.py
FishHook
neri
url(r'^login/$', mylogin),

А как на это урл у вас уходит ПОСТ?
neri
Форма отправки?

<div>
        <form action="/auth/login/" method="post">
            {% csrf_token %}
            <label for="username">Имя пользователя</label>
            <input type="text" name="username" id="username">
            <label for="password">Пароль</label>
            <input type="password" name="password" id="password">
            {% if login_error %}
                <label class="error">{{ login_error }} </label>
            {% endif %}
            <input class="btn btn-primary" type="submit" value="Войти">
            <div><a href="/auth/register/">Регистрация</a></div>
        </form>
    </div>
FishHook
Вы отправляете авторизационные данные
neri
<form action=“/auth/login/” method=“post”>
не туда, где их хотите обрабатываеть
neri
url(r'^login/$', mylogin),

До вашей view они просто не доходят, ведь согласитесь, /auth/login/ и login/ это как бы разные роуты.
neri
Но в urls проекта включены url приложения авторизации.

url(r'^auth/', include('loginsys.urls')),
[
 url(r'^login/$', mylogin), 

Они же должны складываться, и пролучить:

“/auth/login/”
FishHook
neri
Они же должны складываться
Не понимаю, с чего вы так решили.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB