Cap 9) Autenticando e Autorizando nossos Usuários
- Como estamos salvando os dados de nossos usuários utilizando a classe
User
da API de autenticação e autorização do Django, será extremamente fácil implementarmos um mecanismo de login em nossa aplicação, pois vamos usar os recursos disponíveis na própria API. Para isso, basta mapermos nossa url de login e informar a view que será utilizada pela API, da seguinte forma:
No arquivo connectedin/usuarios/urls.py
, faça
...
urlpatterns = patterns('',
...
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name':'usuarios/login.html'}, name='login'),
url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', {'login_url':'/login/'}, name='logout'),
...
)
Observe em connectedin/connectedin/settings.py
que nós realmente temos a aplicação de autenticação django.contrib.auth
habilitada em nosso projeto
-
Implemente o formulário de login, conforme o template
usuarios/login.html
que definimos na url acima. Crie um arquivoconnectedin/usuarios/templates/usuarios/login.html
com o código:{% extends "usuarios/base.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="Email" required autofocus> <input type="password" id="id_passowrd" 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">×</button> Por favor, verifique o Email e/ou Senha informados </div> {% endif %} <a href="{% url 'registrar' %}">registre-se</a> </form>
{% endblock %}
-
Atualize o arquivo
connectedin/connectedin/settings.py
com as três linhas a seguir:LOGIN_URL="/login/" LOGOUT_URL="/logout/" LOGIN_REDIRECT_URL="/"
-
Nossa aplicação ainda não está protegida. Para isso, precisamos adicionar o decorator
@login_required
em todas as views do arquivoconnectedin/perfis/views.py
. Utilize o importfrom django.contrib.auth.decorators import login_required
-
Neste arquivo altere, também, o método
__get_perfil_logado
para retornar o perfil logado:...
def __get_perfil_logado(request): return request.user.perfil
...
-
Altere, também, o arquivo de template
connectedin/perfis/templates/perfis/base.html
para exibir o nome do usuário logado:...
ConnectedIn
Acessando o usuário diretamente no template sem precisar recuperá-lo na view nos permite melhorar outros pontos do código.