Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

egg-passport 鉴权后不会调用之后的逻辑 #3255

Closed
LouisWT opened this issue Dec 1, 2018 · 1 comment
Closed

egg-passport 鉴权后不会调用之后的逻辑 #3255

LouisWT opened this issue Dec 1, 2018 · 1 comment

Comments

@LouisWT
Copy link

LouisWT commented Dec 1, 2018

  • Node Version: 10.13.0
  • Egg Version: 2.14.1
  • Plugin Name: egg-passport
  • Plugin Version: 2.0.1
  • Platform: Window10
  • Mini Showcase Repository: sorry

鉴权时,运行官网的代码没有问题

router.post('/login', app.passport.authenticate('local', { successRedirect: '/authCallback' }));

但是在鉴权后面加的逻辑时不会执行的

  const jwt = app.passport.authenticate('jwt', {
    session: false,
  });
  // controller.accounts.show 没有被执行,返回 404 Not Found
  router.get('/accounts/:id', jwt, controller.accounts.show);

问题可能的原因

我翻了下egg-passport的源码,在 lib/passport.js文件中,显示它调用的就是 passport.js 的authenticate方法

  // lib/passport.js  39~49
  authenticate(strategy, options = {}) {
    ....
    return super.authenticate(strategy, options);
  }

问题就在于 passport.js是 express 的中间件,它的authenticate 返回的形式是这样

// lib/middleware/authenticate.js 81~...

return function authenticate(req, res, next) {
   ...
}

koa 会将 ctx, next 作为参数传入, 这样即使鉴权成功,authenticate 也无法调用 next,就没法执行之后的逻辑了

@LouisWT LouisWT changed the title 【BUG】egg-passport 作为鉴权中间件不会调用之后的逻辑 egg-passport 鉴权后不会调用之后的逻辑 Dec 1, 2018
@LouisWT LouisWT closed this as completed Dec 2, 2018
@zhaoxuyll
Copy link

这样修改成功了:
#1355 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants