Passport.js,jwt,local和facebook仅通过websockets

时间:2017-04-18 13:40:53

标签: javascript node.js sockets passport.js

我正在努力了解如何将护照与护照一起使用:

  1. 注册
  2. 登录
  3. 将websocket上的特定路由限制为特权用户,而公共路由不需要此。
  4. 通过授权标头使用JWT并保持无状态,这意味着服务器中没有会话存储
  5. 我理解以下内容。

    我创建了一个策略:

    passport.use(new FacebookStrategy({
      clientID: 'x',
      clientSecret: 'x',
      callbackURL: '/auth/facebook/callback',
      profileFields: ['id', 'displayName', 'photos', 'emails'],
      session: false,
    }, async (token, tokenSecret, profile, done) => {
      // find or create new user here and return
      done(null, user);
    }));
    
    passport.use(new LocalStrategy({
      usernameField: 'email',
      passwordField: 'password',
      session: false,
    }, async (email, password, done) => {
      // find or create new user here and return
      done(null, user);
    }));
    

    如何在服务器上的传入套接字中使用它?

    服务器代码:

    .on('sign-in', (data) => {
      passport.authenticate('local', function (err, user, info) {
        //do stuff?
      })(req, res, next);
      socket.emit('sign-in', response); // <-- back to the client
    })
    .on('public-route', (data) => {
      // all websocket clients should be able to access this
    })
    .on('private-route', (data) => {
      // only authenticated websocket clients should access this
    })
    

    我不明白它如何与websockets一起使用。以下是我对流程的看法。

    1. 客户端通过websockets连接到服务器
    2. 服务器将套接字连接保存在未经身份验证的用户数组中,因为没有发送JWT(客户端可以访问公共websocket路由)
    3. 客户点击通过Facebook登录。
    4. Websocket使用凭据
    5. 向服务器发送emit
    6. 服务器使用凭据
    7. 获取发送
    8. ......这里为websocket使用护照会发生什么?
    9. A)如果成功登录,服务器会使用JWT发出
    10. B)如果不成功,服务器会发出一条消息。 END
    11. 如果成功的服务器将套接字保存在单独的阵列中,则对于经过身份验证的用户(客户端现在可以访问私有路由)
    12. ......这些路线应该如何看待护照?护照如何保护这些路线?
    13. 客户端将jwt保存在cookie中,如果用户决定关闭浏览器并重新打开它以进行持续登录。
    14. 这有点像我脑海中的形象。我只是没有看到passport.js适合任何地方。除了两个数组之外,我也不太了解如何处理经过身份验证和未经身份验证的websockets。

      我非常接近于实施我自己的身份验证/授权,但我更倾向于使用经过试验和测试的方法,因此使用passport.js。

      我希望这个问题有道理,告诉它是否有效,我会重构!

0 个答案:

没有答案