2012-11-08 10 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

ありがとうございます!私はそれがPassportのドキュメンテーションでより明白であったことを望みます。 –

+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); 
}); 
関連する問題