0

有没有人找到一种在 KoaJS 中使用 passport-saml 的方法?我已经设法确定了这个问题——passport-saml 使用 res.send,这在 koa 中不可用,但到目前为止我还没有找到解决方法。

4

1 回答 1

3

我今天也在想同样的事情,偶然发现了这篇文章。没有基于 koa 的 passport-saml 实现,但是,有一个简洁的中间件模块koa-passport,称为向后兼容旧的护照策略,例如passport-saml. 它使用模拟 express 请求对象来弥补您在使用这些基于 express 的中间件时遇到的一些差距。

这是设置的片段(github 上的完整示例):

// passport.js
const Saml    = require('passport-saml').Strategy,
      passport= require('koa-passport');

passport.serializeUser((user, done) => done(null, user));
passport.deserializeUser((user, done) => done(null, user));

passport.use(new Saml(config, (profile, done) => done(null, profile) });
module.exports = passport;

登录和回调路由

// app.js
const app = Koa();

app.keys = ['abc'];

app.use(session({key: 'test.cookie'}));
app.use(passport.initialize());
app.use(passport.session());

router.get('/login', passport.authenticate('saml',
    {
        successRedirect: '/',
        failureRedirect: '/login'
    })
);

router.post('/login/callback', passport.authenticate('saml',
    {
        failureRedirect: '/',
        failureFlash: true
    }),
    function *consume() {
        this.redirect('/');
    }
);
于 2016-10-05T05:31:35.033 回答