używam pojęcia sesji kontrolować stan logowania użytkownika.
Mam SessionModel i SessionCollection takiego:
SessionModel = Backbone.Model.extend({
defaults: {
sessionId: "",
userName: "",
password: "",
userId: ""
},
isAuthorized: function(){
return Boolean(this.get("sessionId"));
}
});
w App początku I zainicjować dostępne globalnie zmienną activeSession. Na początku ta sesja jest nieautoryzowana i wszelkie widoki wiążące się z tą instancją modelu mogą być odpowiednio renderowane. Podczas próby logowania, najpierw się wyloguję, unieważniając sesję.
logout = function(){
window.activeSession.id = "";
window.activeSession.clear();
}
To spowoduje żadnych widoki, które słuchają tej activeSession i położyłem MAINVIEW w tryb logowania, gdzie będzie wystawiony monit logowania. I wtedy uzyskać nazwę użytkownika i hasło od użytkownika i ustawić je na activeSession tak:
login = function(userName, password){
window.activeSession.set(
{
userName: userName,
password: password
},{
silent:true
}
);
window.activeSession.save();
}
To spowoduje aktualizację do serwera poprzez backbone.sync. Na serwerze mam ustawioną akcję akcji POST sesji, aby sprawdzić nazwę użytkownika i hasło. Jeśli jest prawidłowy, wypełnia dane użytkownika w sesji, ustawia unikalny identyfikator sesji i usuwa hasło, a następnie odsyła wynik.
Moja strona główna.sync jest następnie konfigurowana, aby dodać identyfikator sesji window.activeSession do dowolnego wychodzącego żądania do serwera. Jeśli identyfikator sesji jest nieprawidłowy na serwerze, odsyła on HTTP 401, który wyzwala wylogowanie(), co prowadzi do wyświetlenia znaku zachęty logowania.
Nie jesteśmy jeszcze całkiem skończeni, aby to wdrożyć, więc mogą występować błędy w logice, ale w zasadzie tak do niego podchodzimy. Ponadto, powyższy kod nie jest naszym rzeczywistym kodem, ponieważ zawiera nieco więcej logiki obsługi, ale jest to istotna kwestia.
Jak można sprawdzić, zanim jakiekolwiek dane nigdy nie otrzymał? Tak więc za każdym razem, gdy aplikacja wyszukuje dane, sprawdza, czy są zalogowani. Jeśli nie, przechodzi na stronę logowania. – Matthew
Jeśli chcesz sprawdzić każde wywołanie do zaplecza, powinieneś zintegrować to z kodem zaplecza. Np. Jeśli użytkownik nie jest uwierzytelniony dla * jakiegokolwiek * połączenia, możesz zwrócić '401 Nieautoryzowane 'z twojego serwera lub coś, co możesz złapać po stronie klienta. W ten sposób nie trzeba osobnego połączenia, aby sprawdzić autoryzację przed każdym żądaniem danych. W tym przypadku prawdopodobnie musiałbyś zastąpić metodę 'Backbone.sync', aby wykryć, że' 401 Nieautoryzowane' i wyemitować zdarzenie, którego możesz użyć do wykrycia, czy wywołanie zaplecza było nieautoryzowane. – Sam
Przeczytaj proszę ↓ – user2398029