api token settings
This commit is contained in:
parent
9a849a979c
commit
621bacff1c
@ -24,13 +24,15 @@
|
|||||||
<form action="." method="post">
|
<form action="." method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ user_name_form|crispy }}
|
{{ user_name_form|crispy }}
|
||||||
<button class="btn btn-success" type="submit" name="user_name_form"><i class="fas fa-save"></i> {% trans 'Save' %}</button>
|
<button class="btn btn-success" type="submit" name="user_name_form"><i
|
||||||
|
class="fas fa-save"></i> {% trans 'Save' %}</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<form action="." method="post">
|
<form action="." method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ password_form|crispy }}
|
{{ password_form|crispy }}
|
||||||
<button class="btn btn-success" type="submit" name="password_form"><i class="fas fa-save"></i> {% trans 'Save' %}</button>
|
<button class="btn btn-success" type="submit" name="password_form"><i
|
||||||
|
class="fas fa-save"></i> {% trans 'Save' %}</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
@ -66,10 +68,41 @@
|
|||||||
<form action="." method="post">
|
<form action="." method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ preference_form|crispy }}
|
{{ preference_form|crispy }}
|
||||||
<button class="btn btn-success" type="submit" name="preference_form"><i class="fas fa-save"></i> {% trans 'Save' %}</button>
|
<button class="btn btn-success" type="submit" name="preference_form"><i
|
||||||
|
class="fas fa-save"></i> {% trans 'Save' %}</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<h4><i class="fas fa-terminal fa-fw"></i> {% trans 'API Token' %}</h4>
|
||||||
|
{% trans 'You can use both basic authentication and token based authentication to access the REST API.' %} <br/>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<input class="form-control" value="{{ api_token }}" id="id_token">
|
||||||
|
<div class="input-group-append">
|
||||||
|
<button class="input-group-btn btn btn-primary" onclick="copyToken()"><i
|
||||||
|
class="far fa-copy"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
{% trans 'Use the token as an Authorization header prefixed by the word token as shown in the following examples:' %}
|
||||||
|
<br/>
|
||||||
|
<code>Authorization: Token {{ api_token }}</code> {% trans 'or' %}<br/>
|
||||||
|
<code>curl -X GET http://your.domain.com/api/recipes/ -H 'Authorization: Token {{ api_token }}'</code>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<script type="application/javascript">
|
||||||
|
function copyToken() {
|
||||||
|
let token = $('#id_token');
|
||||||
|
token.select();
|
||||||
|
document.execCommand("copy");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -16,6 +16,7 @@ from django_tables2 import RequestConfig
|
|||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from rest_framework.authtoken.models import Token
|
||||||
|
|
||||||
from cookbook.filters import RecipeFilter
|
from cookbook.filters import RecipeFilter
|
||||||
from cookbook.forms import *
|
from cookbook.forms import *
|
||||||
@ -246,7 +247,10 @@ def user_settings(request):
|
|||||||
else:
|
else:
|
||||||
preference_form = UserPreferenceForm()
|
preference_form = UserPreferenceForm()
|
||||||
|
|
||||||
return render(request, 'settings.html', {'preference_form': preference_form, 'user_name_form': user_name_form, 'password_form': password_form})
|
if (api_token := Token.objects.filter(user=request.user).first()) is None:
|
||||||
|
api_token = Token.objects.create(user=request.user)
|
||||||
|
|
||||||
|
return render(request, 'settings.html', {'preference_form': preference_form, 'user_name_form': user_name_form, 'password_form': password_form, 'api_token': api_token})
|
||||||
|
|
||||||
|
|
||||||
@group_required('guest')
|
@group_required('guest')
|
||||||
|
@ -10,6 +10,9 @@ For the full list of settings and their values, see
|
|||||||
https://docs.djangoproject.com/en/2.0/ref/settings/
|
https://docs.djangoproject.com/en/2.0/ref/settings/
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
|
import string
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
@ -17,7 +20,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
|
||||||
# Get vars from .env files
|
# Get vars from .env files
|
||||||
SECRET_KEY = os.getenv('SECRET_KEY') if os.getenv('SECRET_KEY') else '728f4t5438rz0748fa89esf9e'
|
SECRET_KEY = os.getenv('SECRET_KEY') if os.getenv('SECRET_KEY') else 'INSECURE_STANDARD_KEY_SET_IN_ENV'
|
||||||
|
|
||||||
DEBUG = bool(int(os.getenv('DEBUG', True)))
|
DEBUG = bool(int(os.getenv('DEBUG', True)))
|
||||||
|
|
||||||
@ -61,6 +64,7 @@ INSTALLED_APPS = [
|
|||||||
'crispy_forms',
|
'crispy_forms',
|
||||||
'emoji_picker',
|
'emoji_picker',
|
||||||
'rest_framework',
|
'rest_framework',
|
||||||
|
'rest_framework.authtoken',
|
||||||
'django_cleanup.apps.CleanupConfig',
|
'django_cleanup.apps.CleanupConfig',
|
||||||
'cookbook.apps.CookbookConfig',
|
'cookbook.apps.CookbookConfig',
|
||||||
]
|
]
|
||||||
@ -85,6 +89,14 @@ if REVERSE_PROXY_AUTH:
|
|||||||
MIDDLEWARE.append('recipes.middleware.CustomRemoteUser')
|
MIDDLEWARE.append('recipes.middleware.CustomRemoteUser')
|
||||||
AUTHENTICATION_BACKENDS.append('django.contrib.auth.backends.RemoteUserBackend')
|
AUTHENTICATION_BACKENDS.append('django.contrib.auth.backends.RemoteUserBackend')
|
||||||
|
|
||||||
|
REST_FRAMEWORK = {
|
||||||
|
'DEFAULT_AUTHENTICATION_CLASSES': (
|
||||||
|
'rest_framework.authentication.SessionAuthentication',
|
||||||
|
'rest_framework.authentication.TokenAuthentication',
|
||||||
|
'rest_framework.authentication.BasicAuthentication',
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
ROOT_URLCONF = 'recipes.urls'
|
ROOT_URLCONF = 'recipes.urls'
|
||||||
|
|
||||||
TEMPLATES = [
|
TEMPLATES = [
|
||||||
|
Loading…
Reference in New Issue
Block a user