从护照访问护照策略

Access passport strategy from passport

我使用带有 passport-saml 策略 的护照。在 Strategy 上,有一个我想使用的函数。我知道 策略 是这样使用的:

const SamlStrategy = require('passport-saml').Strategy;

   passport.use(new SamlStrategy(
   {//options here...}, ...);

现在如何从 passport 变量访问 strategy(及其函数)?类似于 passport.Strategy.functionIWantToCall()?

您可以使用 passport._strategy(NAME) 按名称检索策略对象,并通过 _verify 在该对象上检索函数:

var strategy = passport._strategy('saml');
var func     = strategy._verify;

但是,请注意所有这些访问器都带有下划线前缀,这意味着它们应该被视为 private(它们没有记录,我在源代码中找到它们).它们不应该像这样访问,只能在内部通过 Passport 访问。

更好的解决方案是创建一个单独的模块来封装策略对象:

// my-strategy.js
module.exports = new SamlStrategy(...);

// In your Passport setup:
...
passport.use(require('./my-strategy')));
...

// And elsewhere where you need to access the strategy:
var strategy = require('./my-strategy');

用这个

解决了
export class AuthController {
    constructor(private readonly samlStrategy: SamlStrategy) {
    }
    public logout(@Req() req, @Res() res) {     
       // Work around
       (this.samlStrategy as any).logout(req, function (err, req) {
            if (!err) {
                res.send('<h1>Logout Failure!!</h1>');
            }
        });
    }
}