Strongloop passport 组件从 loopback.getCurrentContext() 返回"active" empty



我有这个var context = loopback.getCurrentContext();,它在context.active.acccessToken下返回我调用中使用的当前Token(在Explorer中测试)。

现在,当尝试使用Passport组件时,我从server.js示例git中复制了代码,并将其放在我的boot/aa-scripts.js中context.active变量为空{}。

    // Passport configurators..
    var loopbackPassport = require('loopback-component-passport');
    var PassportConfigurator = loopbackPassport.PassportConfigurator;
    var passportConfigurator = new PassportConfigurator(app);
    // attempt to build the providers/passport config
    var config = {};
    try {
      config = require('../../providers.json');
    } catch (err) {
      console.trace(err);
      process.exit(1); // fatal
    }
    // The access token is only available after boot
    app.middleware('auth', loopback.token({
      model: app.models.AccessToken
    }));
    app.middleware('session:before', loopback.cookieParser(app.get('cookieSecret')));
    app.middleware('session', loopback.session({
      secret: 'kitty',
      saveUninitialized: true,
      resave: true
    }));
    passportConfigurator.init();
    passportConfigurator.setupModels({
      userModel: app.models.Member,
      userIdentityModel: app.models.UserIdentity,
      userCredentialModel: app.models.UserCredential
    });
    for (var s in config) {
      var c = config[s];
      c.session = c.session !== false;
      passportConfigurator.configureProvider(s, c);
    }

    var ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn;
    app.get('/auth/account', ensureLoggedIn('/'), function(req, res, next) {
      res.send(req.user);
    });

我已经注释掉了复制的代码的一部分,而给我带来麻烦的部分是:

    // The access token is only available after boot
    app.middleware('auth', loopback.token({
      model: app.models.AccessToken
    }));
    app.middleware('session:before', loopback.cookieParser(app.get('cookieSecret'));
    app.middleware('session', loopback.session({
      secret: 'kitty',
      saveUninitialized: true,
      resave: true
    }));

我已经尝试了AccessToken和AccessToken

我缺少什么?

您可能需要先将与用户相关的模型附加到数据源:

app.models.AccessToken.attachTo(dataSource);

由于我使用的是Angular应用程序,我最终评论了这3行

app.middleware('auth', loopback.token({
  model: app.models.AccessToken
}));

一切似乎都很顺利。

最新更新