1

Node.JS (0.10.28)、Passport.JS (0.2.0) + Passport-Google (0.3.0)、および Passport.SocketIO (3.0.1) を使用しています。


現在、次を使用して、アプリのパスで Passport.JS によって作成されたユーザーにアクセスできますreq.user

app.get('/profile', function(req, res) {
  // send user data
  res.send(req.user);
});

Passport.SocketIO を使用して、次のユーザーにアクセスすることもできます。

io.sockets.on('connection', function(socket) {
  // get user data
  console.log(socket.handshake.user);

  //...
});

スコープで使用するreq.userことにより、編集して「保存」することも可能です。更新はユーザー オブジェクトに表示されます。req._passport.session.user.property = new_property_valueapp.get/post/all(...)io.sockets.on(...)

私の質問は次のとおりです。更新されたユーザーがに変更を表示するように、スコープをsocket.handshake.user編集して「保存」することは可能ですか? 私は無駄に次のことを試しました:io.sockets.on(...)req.userapp.get/post/all(...)

io.sockets.on('connection', function(socket) {
  // rename username
  socket.handshake.user.username = 'new_username';

  //...
});

...

app.get('/profile', function(req, res) {
  // send user data
  res.send(req.user); // returns {..., username: 'old_username', ...}
});
4

1 に答える 1

2

Socket.io -Sessions (Passport.SocketIO を作成したのと同じ作成者によって作成された) を使用socket.handshake.userしてio.sockets.on(...).

コードは次のようになります。

// initialization ...
// ...

io.sockets.on('connection', function(socket) {
  socket.handshake.getSession(function (err, session) {
    // socket.handshake.user is now session.passport.user

    socket.on(...) { ... }
    // ....

    // test username change
    session.passport.user.username = 'foobar';

    // save session
    //  note that you can call this anywhere in the session scope
    socket.handshake.saveSession(session, function (err) {
      if (err) { // Error saving!
        console.log('Error saving: ', err);
        process.exit(1);
      }
    });
  });
});

//...

app.get('/profile', function(req, res) {
  // send user data
  res.send(req.user); // returns {..., username: 'foobar', ...}
});
于 2014-06-03T06:06:14.757 に答える