2016-12-29 4 views
1

Я тяну свои волосы на некоторое время с этим. Я развертываю приложение django с тестового сервера на apache с помощью машины mod_wsgi. все, кажется, работает, кроме системы аутентификации пользователя django, похоже, что она пишет сеанс таблицы django_session, и как-то он делает некоторую проверку, потому что, когда я предоставляю неверные учетные данные, возвращается сообщение об ошибке. это то, что @login_required() в представлениях всегда возвращает false. и доступ к странице администратора приложения запрещен. в исследовании, которое я сделал, это может быть из-за отсутствия параметра WSGIPassAuthorization В файле apache2.conf, но он не работает.Django не аутентифицируется в соответствии с mod_wsgi

мой VirtualHost файл:

<VirtualHost *:80> 
    ServerName myapp.cl 
    ServerAlias *.myapp.cl myapp.cl 
    Alias /static /home/ubuntu/django_projects/myapp/static 
    <Directory /home/ubuntu/django_projects/myapp/static> 
     Require all granted 
    </Directory> 
    <Directory /home/ubuntu/django_projects/myapp/myapp> 
     <Files wsgi.py> 
      Require all granted 
     </Files> 
    </Directory> 
    WSGIProcessGroup myapp 
    WSGIDaemonProcess myapp python-path=/home/ubuntu/django_projects/myapp 
    WSGIScriptAlias//home/ubuntu/django_projects/myapp/myapp/wsgi.py process-group=myapp application-group=%{GLOBAL} 
</VirtualHost> 

и мой url_file:

rom django.conf.urls import url, include 
from django.contrib import admin 
from . import views as views_ini 
from django.contrib.auth.views import login, logout, password_change, password_change_done 
from myapp.views import aviso_sistema, inicio, LoginForm 



urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 


    url(r'^login/$', login, {'template_name': 'loginrex.html', 
             'authentication_form': LoginForm, 
             }, name='django.contrib.auth.views.login'), 

    url(r'^logout/$', logout, {'next_page': '/login'}, name='logout'), 


    # ....Avisos del sistema 
    url(r'^aviso_sistema/(?P<titulo>[\w\ ]+)/(?P<detalle>[\w\ ]+)/(?P<tipo>[\w\ ]+)$', aviso_sistema, name='aviso_sistema'), 

] 

мой /myapp/myapp/views.py

from django.shortcuts import render, redirect, get_object_or_404 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth.forms import AuthenticationForm 
from django import forms 
from myapp.definiciones.preferenciasDefi import unaPref 
from myapp.deposito import procesoAnombre 
from django.shortcuts import redirect 
from django.conf import settings 

@login_required() 
def inicio(request): 
    #if not request.user.is_authenticated: 
    # raise ValueError('Usuario OK pero no logueado') 
    # return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path)) 

    mdp = unaPref('mesActual') 
    dato = procesoAnombre(mdp) 
    datos = { 
     'mmp': dato, 
     'idv': ' ', 
    } 
    return render(request, 'inicio.html', datos) 

class LoginForm(AuthenticationForm): 
    username = forms.CharField(label="Usuario", max_length=30, 
           widget=forms.TextInput(attrs={'class': 'form-control', 'name': 'username'}), 
           ) 
    password = forms.CharField(label="Clave", max_length=30, 
           widget=forms.PasswordInput(attrs={'class': 'form-control', 'name': 'password'}), 
           ) 

# ........Genera los avisos del sistema 
def aviso_sistema(request, titulo, detalle, tipo): 

    datos = { 
     'titulo': titulo, 
     'detalle': detalle, 
     'tipo': tipo, 
    } 
    return render(request, 'aviso_sistema.html', datos) 

я действительно был бы признателен за помощь в этом , Thanks

+0

Есть ли у вас какие-либо пользователи? Как вы их создали? –

+0

i создал супер пользователя с: python manage.py создать суперпользователя который сгенерировал один в таблице auth_user –

+0

настройка WSGIPassAuthorization. Это то, что вам нужно, когда вы используете аутентификацию без сеанса. – Jayground

ответ

1

Я, наконец, нашел проблему, это были две переменные, расположенные в settings.py, которые должны быть установлены на False.

  • CSRF_COOKIE_SECURE
  • SESSION_COOKIE_SECURE

в местном TestServer не является проблемой, потому что он не делает никаких проверок безопасности. вероятно, они должны быть равны True, когда сертификат SSL применяется к сайту.

+0

Вы сэр - спасатель жизни. В буквальном смысле это было в течение большей части последних двух дней, пытаясь понять это. – DMcP89

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