Ich möchte eine Rest API erstellen, wo Benutzer mit Token authentifizieren können. Ich habe rest_framework.authtoken
in die Liste der installierten Apps aufgenommen. Auch hat die erforderliche Konfiguration im settings.py:Wie bekomme ich das Token mit Django Rest Framework und Ajax
INSTALLED_APPS = (
...
'rest_framework.authtoken'
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
definiert, ein Verfahren zum post_save
Signal hören und neue Token für die neu erstellten Benutzer erstellen. Dann habe ich Migration gemacht. Nach dem Erstellen eines neuen Benutzers kann ich das Token für diesen Benutzer sehen.
Auch wenn ich
http POST 0.0.0.0:80/api-token-auth/ username='[email protected]' password='secure123'
bekomme ich eine dieser Antwort zurück
HTTP/1.0 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Date: Sat, 30 Jul 2016 12:05:30 GMT
Server: WSGIServer/0.1 Python/2.7.3
Vary: Cookie
X-Frame-Options: SAMEORIGIN
{
"token": "4aecfb249265064c55300d782e4c7e66b8b77063"
}
So nehme ich an seiner Arbeits. Aber wenn ich versuche, mit Ajax einzuloggen:
$.ajax({
url: 'http://test.com/api-token-auth/ username=' + email + ' password='+ password,
dataType: 'json',
cache: false,
success: function(data) {
console.log(data);
}.bind(this),
error: function(xhr, status, err) {
console.log(err);
}.bind(this)
});
ich diesen Fehler in der Browser-Konsole:
jquery-3.1.0.min.js:4 GET http://test.com/api-token-auth/%[email protected]%20password=secure123?_=1469883569618 405 (Method Not Allowed)
bundle.js:27453 Method Not Allowed
Wie bekomme ich das Token für authentifizierte Benutzer, so dass ich es verwenden kann, um Posten authentifizierter Nutzer?
Update
auch mit CORS umgehen verwandtes Problem ich django-cors-headers verwende.
Update
%[email protected]%20password=secure123?_=1469885103431 405 xhr jquery-3.1.0.min.js:4 278 B 29 ms
Update: Antwort-Header hinzugefügt
Geben Sie die Details von Ihrem Browser Netzwerk-Kommunikation, in Chrome Sie es in der Registerkarte Netzwerk – schacki
@schacki des Debuggers finden die Details hinzugefügt. Bitte guck dir das an. –
% 20 bedeutet Platz, in Ihrer Ajax-Anfrage ersetzen Sie 'Benutzername' durch '? Benutzername' und 'Passwort' zu '& Passwort'. Auch daran erinnere ich mich, dass dies auch den Parameter & grant_type = password benötigt. Sie können in der Anfrage-URL keinen Platz ('') haben. –