我成功地使用了Node.js + Express + Everyauth(https://github.com/abelmartin/Express-And-Everyauth/blob/master/app.js)来让我的应用程序从Facebook、Twitter等登录。但是,我遇到的问题是Everyauth似乎是“配置并忘记”的。我设置了一个单独的everyauth对象,并将其配置为express的中间件,然后就忘记了它。例如,如果我想创建一个移动版的Facebook登录,我会这样做:
以下是翻译的结果:
问题如下: 移动和非移动客户端都将连接到我的服务器,直到连接建立之前我不知道哪一个正在连接。更糟糕的是,我需要支持多个Facebook应用程序ID(同样地,我在客户端连接并部分解析输入之前不知道我将要使用哪个)。因为everyauth是一个单例,只能配置一次,我无法基于所做的请求来看如何进行这些配置更改。
似乎我需要创建一些中间件,在everyauth中间件之前就对其进行配置,以便随后的everyauth使用正确的appId/appSecret/mobile参数。但我不知道该如何实现这一点...
有什么建议吗?
以下是我目前最好的想法,尽管它看起来很糟糕: 为每种可能的配置创建一个everyauth对象,使用不同的entryPath来区分...
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使用正确的appId/appSecret/mobile参数。但我不知道该如何实现这一点...
有什么建议吗?
以下是我目前最好的想法,尽管它看起来很糟糕: 为每种可能的配置创建一个everyauth对象,使用不同的entryPath来区分...
app.use(function (req, res, next) { require('./auth/facebook').init(req, res, next); });
Facebook 文件将包含与 everyauth 相关的所有内容,例如findOrCreateUser
,return promise
等等... - Justin John