我真的希望这是关于Stormpath API的最后一个问题。从C#和PHP切换到节点有点挑战。
我正在尝试在注册页面上实现社交登录。预建选项仅将其放在“登录”页面上。
渲染页面并向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
});
但是我当然不想干涉核心文件,并且正在考虑创建一个类似app.use('/register', callFunction, router);
的中间件函数,但我在构思它的工作原理时遇到了一些困难。我似乎理解stormpath如何让我生成一个oauth令牌,我使用JWT将其存储为cookie,但我很难将它们整合到工作代码中,而无需复制库中已存在的大量代码。
我甚至可以通过使用REST API来实现它,但我想在express-stormpath库中使用它。因此,在express-stormpath库的上下文中的一些解释也将具有启发性。或者我是否过度思考这个问题,我是否只需要对库进行分叉,对register.js进行更改并尝试向上游推送?
再次感谢大家,
答案 0 :(得分:1)
感谢您的提问!
我找到了一种在您的应用程序中解决此问题的方法,而无需修改express-stormpath库。您需要为注册路由添加路由处理程序,并且在该路由处理程序中,您必须手动执行工作以获取oAuthStateToken
设置,然后调用next()
以使快速存储继续处理注册页面的请求。这是看起来像:
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
}
}
}));
我希望这有帮助!这当然可以更容易,这是对库的一个很好的功能请求。