【问题标题】:Differnce in Ajax postAjax 帖子的区别
【发布时间】:2018-11-06 19:59:27
【问题描述】:

我有一篇这样的帖子

app.post('/auth', passport.initialize(), passport.authenticate('local', { session: false,scope: [] }), serialize, generateToken, respond);

这工作正常。

现在我将上面的帖子作为一个函数并从不同的页面调用

accesstokenController.auth = function(req, res) {
  console.log('Here auth called');
    passport.initialize(), passport.authenticate(
      'local', {
        session: false,
        scope: []
      }), serialize, generateToken, respond
  };

并从不同的路由页面调用此方法。

这不起作用意味着没有调用 passport.initialize() 或 passport.authenticate

路由器调用方式

var oauth = require("../oauth/accesstoken");
router.post('/auth', function(req, res) {
    oauth.auth(req, res);
});

怎么了

谢谢

【问题讨论】:

  • , serialize, generateToken, respond 看起来很奇怪,在您的第一个代码中,它们是额外的路由处理程序,在您的新代码中,您对它们什么都不做。
  • 如何让它们相似
  • 调用passport.initialize() 你可以这样做:passport.initialize()(req, res, function(){ console.log('next')}),但这可能会变得混乱,另一个想法是让 auth 像 accesstokenController.auth = [passport.initialize(), passport.au...]; 这样的数组
  • 但是它会起作用吗 router.post('/auth', function(req, res) { oauth.auth(req, res); });
  • 我是从其他路由文件调用这个方法

标签: node.js ajax express authentication passport.js


【解决方案1】:

请参阅明确参考 app.methodpassing middleware arguments.

您可以像这样导出一组处理函数:

// ./oauth.js

exports.init = [
   // express_session({secret: 'use express-session if you like'),
   // passport.session(),
   passport.initialize()
];

exports.login = [
   passport.authenticate('local', options),
   serialize,
   generateToken,
   (req, res) => res.send('you are logged in')
];

并在您的应用/路由器中使用它们:

// ./app.js

const auth = require('./oauth');

app.use(auth.init);
app.post('/login', auth.login);

关注passport docs
您应该配置模块并单独调用passport.initalize(一个返回快速中间件函数的函数,因此是括号)与app.use

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多