Ich habe mir alle um für sitzungsbasierten Authentifizierung mit kantigem 2.Django Sitzungsauthentifizierung mit kantigem 2
Ich bin eine Anwendung erstellen, die Django auf Backend und Angular 2 auf dem Frontend hat. Um den Prozess einfach zu halten, versuche ich die Django Session Authentifikation zu implementieren.
// Angular 2 authentication service
import { Injectable } from "@angular/core";
import { Headers, Http, Response } from "@angular/http";
import "rxjs/add/operator/toPromise";
import 'rxjs/add/operator/map'
import { AppSettings } from "../../app.settings";
@Injectable()
export class UserAuthService {
private headers = new Headers({'Content-Type': 'application/json'});
private loginUrl = `${AppSettings.BACKEND_URL}` + '/api/v1/users/login/';
constructor(
private http: Http
) { }
login(username, password) {
let data = {
username: username,
password: password
};
return this.http.post(this.loginUrl, data, this.headers)
.map((response: Response) => response.json());
}
}
# Django Login view
def login(self, request):
username = request.data['username']
password = request.data['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
serializer = self.serializer_class(user)
return Response(serializer.data, status=status.HTTP_200_OK)
raise AuthenticationFailed
Ich rufe erfolgreich Backend-API und meine login
Ansicht gibt die erfolgreiche Antwort.
Auch request.user
wird nach dem Login aktualisiert, aber wenn ich versuche, die anderen APIs Angular mit anzurufen oder direkt sehen Django API Benutzer Rest ist nicht angemeldet.
Wo speichern Sie den Anmeldestatus? Wie lassen Sie andere Komponenten/Dienste über den Login-Status wissen? setzt du Header oder sendest Token zurück zu api? Bitte bearbeiten Sie Ihre Frage und fügen Sie zugehörigen Code hinzu. – Sefa
Ich möchte hier keine Tokens verwenden. Ich habe meine Komponente hinzugefügt, wo ich Benutzer (Antwort der Login-API) in localStorage speichern. –
ich vermute, Winkel 2 kann die Cookies nicht sehen, weil sie nicht auf der gleichen Domain (oder Port) sind. zum Beispiel, vielleicht können Sie Ihre API auf example.com und angular 2 auf example.com/frontend, und ändern Sie die Basis-Attribut in Angular's index.html zu "/ Frontend" oder was auch immer den Namen, den Sie verwendet haben. – emostafa