2016-12-29 1 views
1

Je tire mes cheveux pendant un moment avec ça. Je déploie mon application django du serveur de test vers un apache avec la machine mod_wsgi. tout semble fonctionner à l'exception du système d'authentification utilisateur django, il semble écrire session à table django_session et en quelque sorte, il fait une sorte de validation, car lorsque je fournis des informations d'identification erronées message d'erreur personnalisé est retourné. ceci est que @login_required() dans les vues retourne toujours false. et l'accès à la page d'administration de l'application est refusé. dans la recherche que j'ai fait il peut être par le manque de paramètre WSGIPassAuthorization Sur dans le fichier apache2.conf mais cela n'a pas fonctionné.Django ne s'authentifie pas sous mod_wsgi

mon fichier 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> 

et mon 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'), 

] 

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

J'apprécierais vraiment une aide à ce . Merci

+0

Avez-vous des utilisateurs définis? Comment les avez-vous créés? –

+0

i créé un super-utilisateur avec: python manage.py créer superuser qui a généré un dans le tableau auth_user –

+0

WSGIPassAuthorization de réglage. C'est ce dont vous avez besoin lorsque vous utilisez une authentification sans session. – Jayground

Répondre

1

J'ai finalement trouvé le problème, ce sont deux variables situées dans settings.py qui doivent être définies sur False.

  • CSRF_COOKIE_SECURE
  • SESSION_COOKIE_SECURE

dans testserver locale est pas un problème, car il ne fait pas de sécurité de validation. ils doivent probablement être égaux à True lorsque le certificat SSL est appliqué au site.

+0

vous monsieur sont un épargnant de vie. Avoir littéralement été à ceci pour la meilleure partie des 2 derniers jours essayant de comprendre cela. – DMcP89