2016-06-23 4 views
1

Я использую паспорт с паспорт-saml Стратегия. В стратегии есть функция, которую я хотел бы использовать. Я знаю, что стратегия принимается в использовании, как это:Доступ к паспортной стратегии из паспорта

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

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

Теперь, как я мог бы получить доступ к стратегии (и его функции) из passport переменной после этого? Что-то вроде passport.Strategy.functionIWantToCall()?

ответ

1

Вы можете получить объект стратегии по имени, используя passport._strategy(NAME), и функцию _verify на этом объекте:

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

Однако, обратите внимание, что все эти аксессорах начинаются с подчеркивания, что означает, что они должны быть считается частным (они не задокументированы, я нашел их в исходном коде). Они не предназначены для доступа, как это, только паспорт внутри.

Лучшим решением было бы создать отдельный модуль для инкапсуляции объекта стратегии:

// 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'); 
+0

Но я хочу использовать функцию с именем выхода из системы от стратегии, а не проверять. Глядя на источник паспорт-saml, я вижу, что стратегия имеет прототипную функцию: Strategy.prototype.logout = function (req, callback) { this._saml.getLogoutUrl (req, callback); }; –

+0

А, вы хотите ['req.logout()'] (http://passportjs.org/docs/logout)? – robertklep

+0

Да, но это ничего не делает. Он не запускает запросы saml logout и т. Д., Сеть показывает empty = /. Он не вызывает Strategy.prototype.logout(). Я видел, что кто-то сделал выход так: https://github.com/bergie/passport-saml/pull/93, так что я думал, что он может работать так –

Смежные вопросы