2016-05-06 8 views
2

これはしばらくの間、Stormpath APIに関する私の最後の質問です。 C#とPHPからノードに切り替えることはやや難しいことでした。Stormpathの登録ページにソーシャル・ログイン

私は登録ページにソーシャルログインを実装しようとしています。事前構築されたオプションは、ログインページにのみ配置します。

Jadeビューにページをレンダリングして要素を追加するのは簡単ですが、oauthStateTokenを取得する必要があります。基本的に(ちょうどサンプルコード - それは私がregister.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 
     }); 

:今私はlogin.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が私がJWTを使ってクッキーとして保存するoauthトークンを生成する方法を理解しているようですが、ライブラリにすでに存在する多くのコードを複製せずに作業コードに組み込むのは苦労しています。

私はREST APIを使用して動作させることもできますが、express-stormpathライブラリ内で使用したいと考えています。したがって、急行暴風路図書館の文脈でのいくつかの説明もまた啓発されるだろう。私はライブラリをフォークし、register.jsに変更を加え、プッシュアップストリームを試すべきですか?

おかげさまで、ありがとうございました。

答えて

1

ご質問ありがとうございます!

エクスプレスストームパスライブラリを変更せずに、アプリケーションでこれを回避する方法を見つけました。登録ルートのルートハンドラを追加する必要があります。そのルートハンドラでは、手動で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 
    } 
    } 
})); 

私はこれが役に立てば幸い:ここではそれは次のようになります!これは確かに簡単ですが、これは図書館の機能要求です。

+0

私は似たようなことを試しましたが、そのようなライブラリ(特にoauthライブラリはドキュメント化されたAPIを介さずに)で関数を参照するのは良い考えではないようでした。 私はそれを試してみると、報告を見る。私はコードをフォークし、あなたと一緒にプルリクエストを試みます(あなたがそれをやるより良い方法を考えているように、拒否するように自由に感じてください)。これは、ユーザーがサインアップする必要がなく、ソーシャルログインで直接ログインできることをユーザーが認識していることを確認したい場合によく使用されます。 ありがとうございます!あなたたちはチャンピオンです。私は変更しなければならなかった –

+0

2つのこと: 'oauthStateToken'の代わりに、' oAuthStateToke' と '代わりapp.get''のapp.use' - 私はこのケースで問題は全く考えていませんが。 もう一度おねがいします! –

+0

返事をありがとう、私はそれに応じて例を修正しました。私はあなたがそれを働かせることができてうれしいです:) – robertjd

関連する問題