2
respostas

12. Autenticando e Autorizando nossos Usuários - Login

Boa noite, realizei a mesmo processo do vídeo e da explicação escrita desse módulo, mas quando ocorre o login, ele retorna para a tela de login. Verifiquei a parte de registro e está funcionando corretamente.


# -*- coding: utf-8 -*-
# /usuarios/urls.py

from django.conf.urls import patterns, url
from views import RegistrarUsuarioView

urlpatterns = patterns('',
    url(r'^registrar/$', RegistrarUsuarioView.as_view(), name='registrar'),
    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name':'login.html'}, name='login'),
       url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', {'login_url':'/login/'}, name='logout'),
)

settings.py


# código omitido

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',

# .. código omitido

# LOGIN/AUTENTICACAO
LOGIN_URL="/login/"
LOGOUT_URL="/logout/"
LOGIN_REDIRECT_URL="/"

Minha view.py


# -*- coding:utf-8 -*-
# perfis/views.py

from django.shortcuts import render, redirect
from perfis.models import Perfil, Convite
#from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required
#from django.http import HttpResponse


# Create your views here.
@login_required
def index(request):
    #return HttpResponse('Wellcome to ConnectedIn')
    return render(request, 'index.html', { 
        'perfis': Perfil.objects.all(), 
        'perfil_logado': get_perfil_logado(request) #.convites_recebidos.all() 
    })

@login_required
def exibir(request, perfil_id):
    print('ID do perfil recebido: %s ' % (perfil_id))

    perfil = Perfil.objects.get(id=perfil_id)
    perfil_logado = get_perfil_logado(request)
    ja_eh_contato = perfil in perfil_logado.contatos.all()

    return render(request, 'perfil.html', { 
        "perfil": perfil,
        'perfil_logado': get_perfil_logado(request), #.convites_recebidos.all() 
        'ja_eh_contato': ja_eh_contato
    })

@login_required
def convidar(request, perfil_id):

    perfil_a_convidar = Perfil.objects.get(id=perfil_id)
    perfil_logado = get_perfil_logado(request)
    perfil_logado.convidar(perfil_a_convidar)

    return redirect('index')

@login_required
def aceitar(request, convite_id):
    convite = Convite.objects.get(id=convite_id)
    convite.aceitar()

    return redirect('index')

@login_required
def get_perfil_logado(request):
    try:
        print 'realizar o login'
        return request.user.perfil
        #return Perfil.objects.get(id=1)
    except Exception as e:
        raise Exception('Nao foi encontrado nenhum usuario logado.', e)

Tela de login:



<!-- connectedin/usuarios/templates/login.html -->

{% extends "base_usuario.html" %}

{% block body %}

    <form class="form-signin" role="form" action="{% url 'django.contrib.auth.views.login' %}" method="post">
        {% csrf_token %}

        <h2 class="form-signin-heading">Login</h2>

        <input type="text" id="id_username" name="username" class="form-control" placeholder="Nome" required autofocus>

        <input type="password" id="id_password" name="password" class="form-control" placeholder="Senha" required>

        <button class="btn btn-lg btn-primary btn-block" type="submit" value="Login">Login</button>

        <input type="hidden" name="next" value="{{ next }}" />

        {% if form.errors %}
          <div class="alert alert-danger">
            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
            Por favor, verifique o Email e/ou Senha informados
          </div>
        {% endif %}

        <a href="{% url 'registrar' %}">registre-se</a>
    </form>

{% endblock %}

Eu coloco o login e a senha, aperto o botão de login. Ele simplesmente recarrega a tela de login e aparece a mensagem: Por favor, verifique o e-mail e/ou senha informados.

TERMINAL:


[04/Nov/2016 00:00:07] "GET /login/?next=/ HTTP/1.1" 200 1178
[04/Nov/2016 00:11:07] "POST /login/ HTTP/1.1" 200 1415
2 respostas

Boa noite,

Realizando mais um teste, eu não sei porque, mas ao invés de estar usando o nome como login ele está utilizando o e-mail. Segui o mesmo processo que foi passado na vídeo aula, mas não sei ainda porque está usando o e-mail e não o login.

Tem alguma ideia?

Hum, mostre o código da sua tela cadastro do usuário, aquela que recebe os dados para registro.