facebook - 使用 everyauth/express 和多个配置?

标签 facebook node.js express everyauth

我成功地使用 Node.js + Express + Eryauth ( https://github.com/abelmartin/Express-And-Everyauth/blob/master/app.js ) 从我的应用程序登录 Facebook、Twitter 等。

我试图解决的问题是 everyauth 似乎是“配置后忘记”。我设置了一个单一的 everyauth 对象并将其配置为充当 express 的中间件,然后忘记它。例如,如果我想创建移动 Facebook 登录,我会这样做:

var app = express.createServer();
everyauth.facebook
      .appId('AAAA')
      .appSecret('BBBB')
      .entryPath('/login/facebook')
      .callbackPath('/callback/facebook')
      .mobile(true);     // mobile!
app.use(everyauth.middleware());
everyauth.helpExpress(app);
app.listen(8000);

问题来了: 移动客户端和非移动客户端都将连接到我的服务器,在建立连接之前我不知道哪个正在连接。更糟糕的是,我需要支持多个 Facebook 应用程序 ID(而且,在客户端连接并且我部分解析输入之前,我不知道我要使用哪个)。因为 everyauth 是一个配置一次的单例,所以我看不到如何根据发出的请求对配置进行这些更改。

似乎我需要创建某种中间件,它在 everyauth 中间件之前运行以配置 everyauth 对象,以便 everyauth 随后使用正确的 appId/appSecret/mobile 参数。我不知道该怎么做...

建议?

这是我迄今为止最好的想法,尽管它看起来很糟糕: 为每个可能的配置创建一个 everyauth 对象,为每个...使用不同的 entryPath

最佳答案

显然我是在早上喝咖啡之前抢先写了这篇文章,因为我回答了我自己的问题,而且它很容易实现。基本上我只需要创建自己的自定义 express 中间件来切换 everyauth 配置,然后 everyauth 根据请求获得它的脏爪子,所以......

var configureEveryauth = function()
{
    return function configure(req, res, next) {
        // make some changes to the everyauth object as needed....          
        next();
    };
}

现在我的设置变成了:

var app = express.createServer();
everyauth.facebook
  .entryPath('/login/facebook')
  .callbackPath('/callback/facebook');
app.use(configureEveryauth());
app.use(everyauth.middleware());
everyauth.helpExpress(app);
app.listen(8000);

请注意,我什至没有在启动期间完全配置 everyauth Facebook 对象,因为我知道中间件将填充缺少的参数。

关于facebook - 使用 everyauth/express 和多个配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11170506/

相关文章:

ios - 使用Facebook IOS SDK 3.1和Graph API发布带标题的图像

facebook - 获取状态项的 html 页面链接

javascript - 按当前时间戳每分钟更新一次 Node.js Express api

node.js - Heroku 上的 Node API 发送 set-cookie header ,但 Chrome 不会设置它们(但是 Postman 会)

php - Facebook Facepile 批量请求

android - React Native Overflow Touchable 在 Android 中不起作用

javascript - 如何选择 CSS Puppeteer/Node.js 中定义的图像名称?

node.js - 在 Windows 上使用 Node 的 path.resolve

javascript - 使用 sinon 进行快速中间件函数的 stub 是

javascript - 使用 mongoose 查询 mongodb 集合中的正则表达式