Come posso negare agli utenti l'accesso a parti della mia Backbone App se non hanno effettuato l'accesso?

Quindi ho un'applicazione Backbone + homepage web. In questo momento, se accedi al mio sito web, creo un object globale con i dettagli dell'utente dal database. Tuttavia, puoi sempre premere direttamente uno dei routes nell'applicazione.

Come devo gestire gli utenti che non sono "loggati" e reindirizzarli su una "pagina di accesso obbligatoria"?

È un'operazione standard? Fondamentalmente, ho una configuration URL REST che restituisce solo

{ sessionId: [php-session-id-here] }

Se sono loggati, restituirebbe qualcosa di più simile a questo:

 { sessionId: [php-sess-id], userId: [user-id-from-db], firstName: [f-name], lastName: [l-name] } 

Idee? Grazie!

Quello che ho fatto in passato è includere su each pagina insieme a jQuery (in realtà, aggiunto al file jQuery) un'estensione del metodo AJAX per verificare la presenza di un codice personalizzato che invio quando un utente non ha effettuato l'accesso. Quando è stato visto quel valore, l'utente ha reindirizzato la pagina di accesso indipendentemente da ciò che stava accadendo.

Questo perché quel sito aveva un timeout per il login, quindi un utente poteva essere disconnesso mentre era seduto su una pagina e quindi la richiesta AJAX sarebbe fallita. Se non si dispone di un timeout sul login, le probabilità di vedere questo problema sono minime. Ignora semplicemente le richieste provenienti da utenti che non hanno effettuato l'accesso.

Se hai bisogno di aiuto per la codifica, inizia qui: Estensione Ajax: prefiltri, convertitori e trasporti .


Davvero non dovrebbe richiedere nulla di così complesso come lo pseudo-codice:

  1. JS deve fare un po 'di AJAX, quindi JS parla al server
  2. PHP verifica l'accesso se necessario
  3. Se non hai effettuato il login, rispedisci il messaggio di interruzione (ho usato un converter per catturare un dataType "notLoggedIn", ma questo potrebbe essere fatto anche con un trasporto, sono solo più complessi).
  4. JS vede il messaggio di interruzione e esegue un reindirizzamento di window.location piuttosto che restituire un messaggio AJAX.

Se lo desideri, puoi caricare un lightbox con un module di login e inviarlo tramite AJAX a PHP where può avvenire un nuovo login, se ricordi il tentativo AJAX fallito puoi inviarlo di nuovo dopo il login. Quindi l'utente non ha nemless bisogno di lasciare la pagina per accedere nuovamente.

Se stai usando jQuery, puoi impostare un ajaxSetting globale che ti permetta di fare certe cose su determinati codici http. Alcune pagine che ho letto consigliano di aggiungere al tuo JSON un field url per indicare where effettuare il login, ma immagino che dipenda solo da te. Quindi le uniche modifiche necessarie per implementare quello che ho menzionato sono 1. cambiare il codice http in qualcosa di ragionevole come 401 (non autorizzato) e implementare il gestore del codice http. Ma non definirei questo standard, direi semplicemente che ciò che hanno fatto diverse persone (me compreso).

 <?php function IsLoggedIn() { if(isset($_SESSION['id'])) // Change that to what you want { return 1; } else { return 0; } } ?> 

Quindi nel tuo codice, potresti usare qualcosa di simile: if(isLogged()){ header('Location: http://google.com'); } if(isLogged()){ header('Location: http://google.com'); }