3

ここのコードに従いました-> https://github.com/jaredhanson/passport-local/tree/master/examples/express3ユーザーのローカル認証を追加します。

問題は、ユーザーを追加しようとすると、

だから私はこのルートを作成しました

app.get('/signup', function(req,res){
  res.render('/signup');
});

app.post('/signup', function(req,res){
  var body = req.body;
  users.push(body);
  res.redirect('/');
});

次に、フォーム付きのページです。

form(method='POST', action='/signup')
 input(type='text', name='username', placeholder='username')
 input(type='text', name='password', placeholder='password')
 button.btn Register

ダミーDBこれは例の1つです

users = [
  {id:1, username: 'test', password:'papapa'}
];

したがって、フォームで情報を送信すると、すべて問題ありませんが、新しく作成したユーザーでログインしようとすると、「エラー:ユーザーをセッションにシリアル化できませんでした」と表示されます。

serializeUserはこれです

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  findById(id, function (err, user) {
    done(err, user);
  });
});
4

2 に答える 2

5

POST / signupルートにプッシュされているユーザーには、例のシリアル化コードで想定されているIDがありません。

このようなものに変更すると、機能するはずです。

app.post('/signup', function(req,res){
  var body = req.body;
  body.id = users.length;
  users.push(body);
  res.redirect('/');
});

(これは単なる例であり、「実際の」アプリには推奨されないことに注意してください。)

于 2012-09-27T15:08:21.820 に答える
2

セッションシリアライザーが欠落していると思います。https://github.com/jaredhanson/passportのセクション「セッション」をご覧ください。

基本的に、現在のユーザーをセッションに保存するため(passport.serializeUser)とそれを読み戻すため(passport.deserializeUser)の2つの関数が必要です。

于 2012-09-27T11:12:19.773 に答える