2015-10-25 9 views
5

Aggiornamento:sia req.logout() o req.session.destroy() non funziona

Si comporta coerente con la mia login reale FB. Quando esco dal mio Facebook e clicco sul pulsante "login" sul mio sito web, mi reindirizza alla pagina di login di Facebook e mi chiede di accedere. Successivamente, torno alla pagina web "profile.html" sul mio sito web correttamente. Tuttavia, quando faccio clic su "Esci" dal mio sito Web, viene visualizzata la pagina iniziale del mio sito Web. Questa volta, quando faccio di nuovo clic sul pulsante "accedi", si passa direttamente a "profile.html" del mio sito web. Sembra che l'ultimo "logout" non abbia funzionato affatto. Il "logout" può funzionare solo quando disconnetto il mio account Facebook. Quindi la sessione utilizzata sul mio sito web si basa sulla sessione di Facebook. Molto strano!


Sto utilizzando PassportJS per completare il mio processo di autenticazione. Ma ho trovato req.logout() o req.session.destroy() non funziona affatto.

// route for showing the profile page 
    app.get('/login', isLoggedIn, function(req, res) { 
     res.render('profile', { 
      user : req.user // get the user out of session and pass to template 
     }); 
    }); 
    // route middleware to make sure a user is logged in 
    function isLoggedIn(req, res, next) { 

    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated()){ 
     console.log("req is authenticated!"); 
     return next(); 
    } 

    // if they aren't redirect them to the home page 
    res.redirect('/'); 
}  
// route for logging out 
    app.get('/logout', function(req, res) { 
     console.log("logging out!"); 
     req.logout(); 
     req.session.destroy(); 
     res.redirect('/'); 
    }); 

Quando ho interrotto il logout, posso vedere il messaggio di "disconnessione". E poi sono stato reindirizzato alla home page. Quando ho fatto nuovamente clic sul login, non riesco a vedere nessuna finestra di accesso e sono entrato direttamente nella pagina "profilo". Durante il processo, ho visto "req è autenticato!" Messaggio.

Le mie domande:

1: Dove si trova "req.isAuthenticated()" da? Perché è sempre vero?

2: perché "req.logout()" o "req.session.destroy()" non funziona?

Grazie

Derek

risposta

1

req.isAuthenticated() fa parte del passaporto. Pertinente codice:

req.isAuthenticated = function() { 
    var property = 'user'; 
    if (this._passport && this._passport.instance._userProperty) { 
    property = this._passport.instance._userProperty; 
    } 

    return (this[property]) ? true : false; 
}; 

Controlli per la proprietà e restituisce un valore booleano.


req.logout() rimuove la proprietà in modo che restituisce false nelle richieste future.


Nel frattempo, session.destroy proviene dal middleware expressjs/session, quindi non è relativo al passaporto. Forse stai creando nuovamente la sessione nella pagina dell'indice. La domanda ha bisogno di più informazioni.