43

Passport.js を使用して、ユーザー名とパスワードでユーザーをログインさせています。基本的に、Passport サイトのサンプル コードを使用しています。ここに私のコードの関連部分(私が思う)があります:

app.use(passport.initialize());
app.use(passport.session());

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

passport.deserializeUser(function(obj, done) {
    done(null, obj);
});

passport.use(new LocalStrategy(function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
        if (err) {
            return done(err);
        }
        if (!user) {
            return done(null, false, { message: 'Incorrect username.' });
        }
        if (!user.validPassword(password)) {
            return done(null, false, { message: 'Incorrect password.' });
        }
        return done(null, user);
        });
    }
));

app.post('/login',
    passport.authenticate('local', { failureRedirect: '/login/fail', failureFlash: false }),
    function(req, res) {
        // Successful login
        //console.log("Login successful.");
        // I CAN ACCESS req.user here
});

これで正常にログインできたようです。ただし、次のようなコードの他の部分でログインユーザーの情報にアクセスできるようにしたいと考えています。

app.get('/test', function(req, res){
    // How can I get the user's login info here?
    console.log(req.user);  // <------ this outputs undefined
});

SOに関する他の質問を確認しましたが、ここで何が間違っているのかわかりません。ありがとうございました!

4

7 に答える 7

70

パーティーに遅れましたが、自分で答えをグーグルで調べた後、これは答えられていないことがわかりました。

リクエストの中には、req.user操作できるオブジェクトがあります。

次のようなルート:

app.get('/api/portfolio', passport.authenticate('jwt', { session: false }), stocks.buy);

このようなコントローラー:

buy: function(req, res) {
      console.log(req.body);
      //res.json({lel: req.user._id});
      res.json({lel: req.user});
    }
于 2015-10-30T01:40:11.587 に答える
11

Passport のドキュメントを参照すると、ユーザー オブジェクトは req.user に含まれています。下記参照。

    app.post('/login',
      passport.authenticate('local'),function(req, res) {
       // If this function gets called, authentication was successful.
       // `req.user` contains the authenticated user.
       res.redirect('/users/' + req.user.username);
     });

そうすれば、リダイレクト先のページからユーザー オブジェクトにアクセスできます。

行き詰まった場合は、明確に実装した私の Github プロジェクトを参照してください。

于 2017-03-01T17:29:13.940 に答える
-3

Passport ミドルウェアを登録する前に、入力するミドルウェアを登録する必要があります。req.session

たとえば、以下はエクスプレス cookieSession ミドルウェアを使用します

app.configure(function() {

  // some code ...

  app.use(express.cookieParser());
  app.use(express.bodyParser());
  app.use(express.cookieSession()); // Express cookie session middleware 
  app.use(passport.initialize());   // passport initialize middleware
  app.use(passport.session());      // passport session middleware 

  // more code ...

});
于 2013-02-19T10:51:21.313 に答える