2012-11-08 28 views
5

Tôi muốn tự động tạo tài khoản người dùng bằng cách tạo tên người dùng và mật khẩu ngẫu nhiên, sau đó người dùng được đăng nhập tự động (người dùng không biết tên người dùng/mật khẩu của mình, trình duyệt của anh ấy chỉ lưu trữ cookie phiên).Cách xác thực người dùng phía máy chủ bằng Passport JS?

Chức năng hộ chiếu là phần mềm trung gian, vậy làm thế nào tôi có thể xác thực người dùng mà tôi vừa tạo? Hoặc, sẽ tốt hơn nếu bằng cách nào đó chuyển hướng đến tuyến đường của tôi app.post('/login') và gửi các biến đó? (Nhưng bằng cách nào đó gửi những người đến trình duyệt, chỉ để được gửi lại cho máy chủ không có vẻ rất an toàn hoặc hiệu quả).

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'); 
    }) 
} 
}); 

Trả lời

6

Thay thế cuộc gọi của bạn để passport.authenticate('local')(); với

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); 
}); 

và cho tôi biết làm thế nào mà đi.

+0

Cảm ơn bạn rất nhiều! Tôi muốn điều đó rõ ràng hơn trong tài liệu Hộ chiếu. –

+1

Tôi đồng ý, nó khá ẩn và tôi nhớ cũng phải vật lộn để tìm nó. – rdrey

1

câu trả lời của rdrey rất hữu ích. Một chi tiết có thể hiển nhiên đối với hầu hết nhưng không phải với tôi là mô hình .save() bị lỗi và bản ghi trong cuộc gọi lại. Vì vậy, toàn bộ mô hình là

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); 
}); 
Các vấn đề liên quan