mirror of https://github.com/interlegis/sapl.git
Browse Source
* Adiciona autenticação via Token * Adiciona token nos usuários existentes * Adiciona token automaticamente nos novos usuários * Adiciona campo para somente leitura com o token do usuário na edição do usuário * Adiciona função para renovar token do usuário autenticado * Adiciona botão para renovar token * Corrige com mudanças solicitadas * Padroniza nome do html * Cria página para visualização de perfil * Redireciona para perfil do usuário quando é criado * Altera url para página de detalhe do usuário * Adiciona botões para pesquisa e edição de usuário * Corrige model de Pesquisa Usuário * Redireciona pra tela de detalhe * Altera forma para criar objeto ou estender dicionário * Corrige ajax para post e id do usuário dono do token * Adiciona roles in rows * Adiciona botao de cancelar em editar usuario * Conserta localizacao de templates HTML Co-authored-by: eribeiro <edwardr@senado.leg.br> Co-authored-by: Vinícius Cantuária <cantuariavc@gmail.com>pull/3008/head
Edward
5 years ago
committed by
GitHub
12 changed files with 238 additions and 41 deletions
@ -0,0 +1,17 @@ |
|||
1. Realizar o migrate |
|||
|
|||
./manage.py migrate |
|||
|
|||
2. Criar um API Token para usuário e anotar a API Key gerada. |
|||
|
|||
python3 manage.py drf_create_token admin |
|||
|
|||
3. Testar endpoint |
|||
curl http://localhost:8000/api/version -H 'Authorization: Token <API Key>' |
|||
|
|||
4. Exemplo de POST |
|||
curl -d '{"nome_completo”:”Gozer The Gozerian“, "nome_parlamentar": “Gozer”, "sexo":"M"}' -X POST http://localhost:8000/api/parlamentares/parlamentar/ -H 'Authorization: Token <API Key>' -H 'Content-Type: application/json' |
|||
|
|||
Note: If you use TokenAuthentication in production you must ensure that your API is only available over https. |
|||
|
|||
References: https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication |
@ -0,0 +1,26 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.11.29 on 2020-04-27 17:40 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations |
|||
from django.conf import settings |
|||
from django.contrib.auth import get_user_model |
|||
from rest_framework.authtoken.models import Token |
|||
|
|||
|
|||
def adiciona_token_de_usuarios(apps, schema_editor): |
|||
for user in get_user_model().objects.all(): |
|||
Token.objects.get_or_create(user=user) |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
initial = True |
|||
|
|||
dependencies = [ |
|||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.RunPython(adiciona_token_de_usuarios) |
|||
] |
@ -0,0 +1,57 @@ |
|||
{% extends "crud/detail.html" %} |
|||
{% load i18n %} |
|||
{% load crispy_forms_tags cropping %} |
|||
|
|||
{% block base_content %} |
|||
<div class="actions btn-group float-right " role="group" style="margin: 0px 0px 20px"> |
|||
<a href="{% url 'sapl.base:usuario' %}" class="btn btn-outline-primary"> |
|||
{% blocktrans with verbose_name=view.verbose_name %} Fazer nova pesquisa {% endblocktrans %} |
|||
</a> |
|||
<a href="{% url 'sapl.base:user_edit' user.pk %}" class="btn btn-outline-primary"> |
|||
{% blocktrans with verbose_name=view.verbose_name %} Editar usuário {% endblocktrans %} |
|||
</a> |
|||
</div> |
|||
|
|||
<div> |
|||
<table class="table table-striped"> |
|||
<tbody> |
|||
<tr> |
|||
<th scope="row">Usuário</th> |
|||
<td>{{ user.username }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th scope="row">Token</th> |
|||
<td>{{ token }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th scope="row">Nome</th> |
|||
<td>{% firstof user.first_name "-" %}</td> |
|||
</tr> |
|||
<tr> |
|||
<th scope="row">Sobrenome</th> |
|||
<td>{% firstof user.last_name "-" %}</td> |
|||
</tr> |
|||
<tr> |
|||
<th scope="row">Endereço de e-mail</th> |
|||
<td>{% firstof user.email "-" %}</td> |
|||
</tr> |
|||
<tr> |
|||
<th scope="row">Usuário ativo?</th> |
|||
<td>{% if user.is_active %} Sim {% else %} Não {% endif %}</td> |
|||
</tr> |
|||
<tr> |
|||
<th scope="row">Último acesso</th> |
|||
<td>{{ user.last_login }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th scope="row">Roles</th> |
|||
<td><ul style="list-style-type:none"> |
|||
{% for r in roles %} |
|||
<li><input type="checkbox" {{ r.checked }} disabled> {{r.group }}</li> |
|||
{% endfor %} |
|||
</ul></td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
{% endblock base_content %} |
@ -0,0 +1,20 @@ |
|||
{% extends "crud/form.html" %} |
|||
{% load i18n %} |
|||
|
|||
{% block extra_js %} |
|||
<script type="text/javascript"> |
|||
$(() => { |
|||
var $crf_token = $('[name="csrfmiddlewaretoken"]').attr('value'); |
|||
$("#renovar-token").click(() => { |
|||
$.ajax({ |
|||
url: "{% url 'sapl.api:recria_token' user.id %}", |
|||
type: "POST", |
|||
headers: { "X-CSRFToken": $crf_token }, |
|||
dataType: "json", |
|||
success: (res) => $("#id_token").val(res.token) |
|||
}); |
|||
}); |
|||
}); |
|||
</script> |
|||
|
|||
{% endblock %} |
Loading…
Reference in new issue