0

这将是一个相当广泛的问题,因为我被困在哪里真正开始。我正在尝试使用 Passport 对 SmartThings 进行身份验证。在此处查看 SmartThings 文档:http: //docs.smartthings.com/en/latest/smartapp-web-services-developers-guide/tutorial-part2.htm

SmartThings 不返回任何用户信息,只是一个身份验证令牌,然后您可以使用它来调用 SmartThings 实例以控制环境。

我目前正在尝试使用 OAuth2 策略,但是这需要返回一个用户配置文件来序列化用户,在这种情况下为空。

我想要实现的是让某人使用 SmartThings 进行授权并将他们的令牌存储在会话中,以便可以提取他们的数据。

从长远来看,我会将它分配给我的应用程序本地的用户帐户,但是现在,我只想让上述工作正常进行。

有谁知道我在这方面做得最好。我对此有些挣扎..也许使用 OAuth2 策略不是正确的方法吗?我目前有这个:

var passport = require('passport');
var OAuth2Strategy = require('passport-oauth2').Strategy;

var verifyHandler = function(req, token, refreshToken, profile, done){
  return done(token)
}
passport.serializeUser(function(user, done) {
    done(null, user.id);
});

module.exports.http = {
  customMiddleware: function(app) {
    passport.use(new OAuth2Strategy({
      authorizationURL: 'https://graph.api.smartthings.com/oauth/authorize',
      tokenURL: 'https://graph.api.smartthings.com/oauth/token',
      clientID: '123',
      clientSecret: 'abc',
      callbackURL: 'http://localhost:1337/auth/smartthings/callback',
      skipUserProfile: true,
      passReqToCallback: true
    }, verifyHandler));

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

1 回答 1

0

我认为您想要做的是在身份验证过程中:

  1. 使用护照的local策略在您的应用程序中对用户进行身份验证
  2. 手动生成 SmartThings 的授权码和令牌 -此处指南
  3. 将令牌保存在用户会话中

之后,您可以使用tokenin session 向 SmartThings 的 API 发出请求

于 2016-06-28T12:41:30.237 回答