2012-11-08 39 views
5

我想通過生成隨機的用戶名和密碼自動生成用戶帳戶,然後用戶自動登錄(用戶不知道他的用戶名/密碼,他的瀏覽器只是存儲會話cookie)。如何使用Passport JS認證用戶服務器端?

護照功能作爲中間件,所以我如何認證我剛剛生成的用戶?或者,以某種方式重定向到我的app.post('/login')路線併發送這些變量會更好嗎? (但不知何故將這些內容發送給瀏覽器,只是要發送回服務器似乎並不安全或有效)。

app.get('/signup', function(req, res) { 
if(req.isAuthenticated()) { res.redirect('/'); } 
else { 
    var today = new Date(); 
    var weekDate = new Date(); 
    weekDate.setDate(today.getDate() + 7); 

    var key1 = Math.random().toString(); 
    var key2 = Math.random().toString(); 
    var hash1 = crypto.createHmac('sha1', key1).update(today.valueOf().toString()).digest('hex'); 
    var hash2 = crypto.createHmac('sha1', key2).update(weekDate.valueOf().toString()).digest('hex'); 

    var newUser = new models.User({ 
     username: hash1, 
     password: hash2, 
     signupDate: today, 
     accountStatus: 0, 
     expirationDate: weekDate, 
    }); 

    newUser.save(function(err) { 
     if(err) {} 
     console.log("New user created."); 

     //HOW CAN I PASS USERNAME AND PASSWORD ARGUMENTS??? 
     passport.authenticate('local')(); 
     res.redirect('/login'); 
    }) 
} 
}); 

回答

6

req.logIn(user, function(err) { 
    if (err) { return next(err); } 
    //copied from the docs, you might want to send the user somewhere else ;) 
    return res.redirect('/users/' + user.username); 
}); 

更換你到passport.authenticate('local')();電話,讓我知道如何繼續下去。

+0

非常感謝!我希望這在護照文件中更爲明顯。 –

+1

我同意,這是相當隱蔽的,我記得也努力找到它。 – rdrey

1

rdrey的回答非常有幫助。一個細節可能對大多數人來說都很明顯,但對我來說不是那個模型.save()會在回調中產生錯誤和記錄。所以整個模式是

newuser.save(function(err,user) { 
req.logIn(user, function(err) { 
if (err) { return next(err); } 
//copied from the docs, you might want to send the user somewhere else ;) 
return res.redirect('/users/' + user.username); 
}); 
相關問題