2

これがしばらくの間、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);それがどのように機能するかを概念化するのに苦労しています。ストームパスで、JWT を使用して Cookie として保存する oauth トークンを生成する方法を理解しているようですが、ライブラリに既に存在する多くのコードを複製せずに、動作するコードにまとめるのに苦労しています。

REST API を使用して動作させることもできますが、express-stormpath ライブラリ内で使用したいと考えています。したがって、express-stormpath ライブラリのコンテキストでの説明も啓発的です。または、私はこれを考えすぎていますか? ライブラリをフォークし、register.js に変更を加えて、アップストリームにプッシュする必要がありますか?

改めて感謝します。

4

1 に答える 1

1

質問ありがとう!

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
    }
  }
}));

これが役立つことを願っています!これは確かに簡単かもしれません。これは、ライブラリに対する優れた機能要求です。

于 2016-05-06T16:44:24.960 に答える