gpt4 book ai didi

javascript - Stormpath 注册页面上的社交登录

转载 作者:行者123 更新时间:2023-11-30 00:09:32 26 4
gpt4 key购买 nike

我真的希望这是我最近一段时间关于 Stormpath API 的最后一个问题。从 C# 和 PHP 切换到 node 具有一定的挑战性。

我正在尝试在注册页面上实现社交登录。预建选项仅将其放在登录页面上。

呈现页面并将元素添加到 Jade View 非常简单,但我需要获得一个 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 token ,我使用 JWT 将其存储为 cookie,但我很难将它组合成工作代码而不复制库中已经存在的大量代码。

我什至可以通过使用 REST API 让它工作,但我想在 express-stormpath 库中使用它。因此,在 express-stormpath 库的上下文中进行一些解释也会很有启发性。或者我是不是想太多了,我应该只 fork 库,对 register.js 进行更改并尝试向上游推送吗?

再次感谢大家,

最佳答案

感谢提问!

我找到了一种在您的应用程序中解决此问题的方法,无需修改 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
}
}
}));

希望对您有所帮助!这当然可以更容易,这是对库的一个很好的功能请求。

关于javascript - Stormpath 注册页面上的社交登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com