5

ランダムなユーザー名とパスワードを生成してユーザー アカウントを自動的に生成したい場合、ユーザーは自動的にログインします (ユーザーは自分のユーザー名/パスワードを知らず、ブラウザーはセッション Cookie を保存するだけです)。

Passport はミドルウェアとして機能しますが、生成したばかりのユーザーを認証するにはどうすればよいですか? または、何らかの方法でルートにリダイレクトして、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');
    })
}
});
4

2 に答える 2

1

rdrey の回答は非常に役に立ちました。ほとんどの人にとっては明らかであるが、私にとってはそうではなかった詳細の 1 つは、 model .save () が err を取得し、コールバックでレコードが取得されることです。したがって、パターン全体は

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); 
});
于 2013-07-14T23:43:50.597 に答える