Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook 是否使用Everyauth/Express和多种配置?_Facebook_Node.js_Express_Everyauth - Fatal编程技术网

Facebook 是否使用Everyauth/Express和多种配置?

Facebook 是否使用Everyauth/Express和多种配置?,facebook,node.js,express,everyauth,Facebook,Node.js,Express,Everyauth,我成功地使用Node.js+Express+Everyauth()从我的应用程序登录到Facebook、Twitter等 我试图解决的问题是Everyauth似乎是“配置并忘记”的。我设置了一个Everyauth对象,并将其配置为express的中间件,然后忘记它。例如,如果我想创建一个移动Facebook登录,我会: var app = express.createServer(); everyauth.facebook .appId('AAAA') .appSecre

我成功地使用Node.js+Express+Everyauth()从我的应用程序登录到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对象,为每个配置使用不同的入口路径…

显然,我在早上喝咖啡之前就开始写这篇文章了,因为我回答了我自己的问题,而且很容易实现。基本上,我只需要创建自己的定制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对象,因为我知道中间件将填充缺少的参数。

如何将所有everyauth代码放到另一个文件中,并在我们的中间件中要求<代码>应用程序使用(函数(req,res,next){require('./auth/facebook').init(req,res,next);})facebook文件将包含所有与everyauth相关的内容<代码>findOrCreateUser,
退货承诺
等。。。