在Stormpath的注册页面上进行社交login

我真的希望这是我在Stormpath API上的最后一个问题。 从C#和PHP切换到节点已经有些挑战了。

我正试图在注册页面上实现社交login。 预构build选项仅将其放置在login页面上。

渲染页面并向Jade视图添加元素很简单,但我需要获得一个oauthStateToken。 现在我看看login.js代码是如何实现的:

var oauth = require('../oauth'); var oauthStateToken = oauth.common.resolveStateToken(req, res); var formActionUri = (config.web.login.uri + (nextUri ? ('?next=' + nextUri) : '')); var hasSocialProviders = _.some(config.web.social, function (socialProvider) { return socialProvider.enabled; }); extend(options, { form: form, formActionUri: formActionUri, oauthStateToken: oauthStateToken, hasSocialProviders: hasSocialProviders }); 

所以本质上它调用誓约文件,并通过代码,理论上,我可以做一些类似的register.js – 本质上(只是示例代码):

  var oauth = require('../oauth'); var _ = require('lodash'); var hasSocialProviders = _.some(config.web.social, function (socialProvider) { return socialProvider.enabled; }); var oauthStateToken = ''; if (hasSocialProviders) { oauthStateToken = oauth.common.resolveStateToken(req, res); } helpers.render(req, res, view, { form: helpers.sanitizeFormData(req.body), formModel: viewModel.form oauthStateToken : oauthStateToken, hasSocialProviders: hasSocialProviders }); 

但是我当然不想干涉核心文件,而是在考虑创build一个中间件函数,比如app.use('/register', callFunction, router); 但是我很难概念化这个工作。 我似乎理解stormpath如何让我生成一个oauth标记,我使用JWT将其存储为一个cookie,但是我很难将它整合到工作代码中,而无需复制库中已有的很多代码。

我甚至可以通过使用REST API来工作,但是我想在express-stormpath库中使用它。 所以,在快件图书馆的背景下的一些解释也是有启发性的。 或者我是否过度这个,我应该只是叉库,做register.js的变化,并尝试推上游?

再次感谢人们,

谢谢你的问题!

我find了一种在应用程序中解决这个问题的方法,而不用修改express-stormpath库。 您需要为您的注册路由添加一个路由处理程序,并且在该路由处理程序中,您必须手动执行工作以获取oAuthStateToken设置,然后调用next()以让express-stormpath继续处理请求注册页面。 以下是这个样子:

 var cookieParser = require('cookie-parser'); var oauth = require('express-stormpath/lib/oauth'); // create your express server, 'app' app.use('/register', cookieParser(), function (req, res, next) { var oauthStateToken = oauth.common.resolveStateToken(req, res); req.app.get('stormpathConfig').templateContext = { oauthStateToken: oauthStateToken }; next(); }); app.use(stormpath.init(app, { // .. other config options web: { register: { view: 'views/register.jade' // path to your custom registration file } } })); 

我希望这有帮助! 这当然可以更容易,这是图书馆的一个很好的function要求。