2013-07-30 13 views
12

Sto tentando di autenticare e accedere a un utente immediatamente dopo aver inviato un POST sul modulo /register. Idealmente, vorrei che gli utenti potessero registrarsi e quindi essere reindirizzati immediatamente alla dashboard senza dover inserire nuovamente le loro credenziali.Autenticazione passaporto immediatamente dopo la registrazione di nuovo utente

Il mio server utilizza Passaporto 0.1.17 con la strategia locale configurata per utilizzare l'indirizzo di posta elettronica e la password per l'accesso. Il codice attuale è:

app.post('/register', function(req, res) { 

    // attach POST to new User variable 
    var registerUser = new User({ email: req.body.email, password: req.body.password, name: req.body.name }); 

    // save registerUser Mongo 
    registerUser.save(function(err) { 
    if(err) { 
     console.log(err); 
    } else { 
     console.log('registerUser: ' + registerUser.email + " saved."); 
    } 
    }); 

    // here is where I am trying to authenticate and then redirect 
    passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }), 
    res.redirect('/dashboard'); 
    }); 

Come dovrei refactoring questo codice per salvare il nuovo utente, quindi autenticarsi e, infine, reindirizzare al cruscotto?

Grazie in anticipo!

+2

Utilizzare il metodo 'req.logIn' per l'autenticazione subito dopo la registrazione. – moka

+0

Grazie per aver fatto riferimento a 'req.logIn', che in precedenza non ero a conoscenza. Puoi fornire un codice più specifico. Ho provato quanto segue dopo il commento finale della domanda di cui sopra, ma non ha funzionato: 'req.login (registerUser, la funzione (err) { se (err) {return successivo (err);} ritorno res.redirect ('/ cruscotto'); }); ' – surfearth

+0

è necessario fornire i dettagli che vengono utilizzati per deserializzare utente, di solito si tratta di ID di un utente che è memorizzato in una sessione. – moka

risposta

19

Ecco la soluzione mi è venuta dopo aver letto su req.login:

app.post('/register', function(req, res) { 
    // attach POST to user schema 
    var user = new User({ email: req.body.email, password: req.body.password, name: req.body.name }); 
    // save in Mongo 
    user.save(function(err) { 
    if(err) { 
     console.log(err); 
    } else { 
     console.log('user: ' + user.email + " saved."); 
     req.login(user, function(err) { 
     if (err) { 
      console.log(err); 
     } 
     return res.redirect('/dashboard'); 
     }); 
    } 
    }); 
}); 

Vorrei ripulirlo un po 'e pensare che la sezione err potrebbe essere più robusto, ma questa è una soluzione di funzionamento. Nota che qualcun altro lo implementa, devono essere consapevoli del fatto che sono personalizzati per l'utilizzo della strategia passaporto-locale con e-mail al posto del nome utente.

+1

Query da un novizio: Questo significa che si sta memorizzare la password dell'utente come testo normale nel vostro database? Quindi, se qualcuno ottiene il tuo database, può leggere la password dell'utente? –

+2

@ Paolo D. White: So che questo è vecchio, ma per rispondere alla tua domanda a beneficio dei futuri lettori, è comune per gestire la crittografia all'interno della classe del modello utente stesso, in un modo che sia trasparente per il resto dell'applicazione (che ha il vantaggio di renderlo inevitabile). – Matt

+0

@ Matt: bello, buon umore. –

Problemi correlati