2016-12-29 53 views
1

我正在用这个拉出我的头发一段时间。我正在使用mod_wsgi机器将我的django应用程序从测试服务器部署到apache。 一切似乎工作,除了Django的用户认证系统似乎写会话表django_session,不知何故,它做了某种验证,因为当我提供错误的凭据自定义错误消息被返回。这就是@login_required()在视图中总是返回false。并且访问应用管理页面被拒绝。 在我所做的研究中可能会缺少参数 WSGIPassAuthorization在apache2.conf文件中,但它不起作用。Django无法在mod_wsgi下进行身份验证

我的虚拟主机文件:

<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) 

我真的很希望得到一些帮助,这。 谢谢

+0

您是否定义了任何用户?你是如何创建它们的? –

+0

我创建了一个超级用户: python manage.py创建超级用户 它在表auth_user –

+0

中设置了WSGIPassAuthorization。这是您在使用基于非会话的身份验证时所需要的。 – Jayground

回答

1

我终于找到了问题,它是两个变量位于settings.py必须设置为False。

  • CSRF_COOKIE_SECURE
  • SESSION_COOKIE_SECURE

在当地TESTSERVER是不是一个问题,因为它没有任何的安全验证。当SSL证书应用于站点时,它们可能必须等于True。

+0

你先生是救命的人。在过去的两天里,我们已经在这方面做了很多工作,试图弄清楚这一点。 – DMcP89