2016-08-01 20 views
1

私はカスタムSSOサービスを実装していますが、うまくいきますが、このページにリダイレクトするのではなく、ユーザー権限を要求するポップアップを開きたいと思います。子ウィンドウからアクションをディスパッチする方法は?

問題は、ユーザーが自分のアカウントへの接続を承認または拒否したときに、親ウィンドウ(Webアプリケーション)を更新してポップアップ(承認)を閉じる必要があることです。

だから私は、その状態を更新するために、私の親ウィンドウに私のポップアップからアクションを派遣について考えて何かした

componentWillMount() { 
    window.opener.loginSuccess(this.props.user); 
} 

しかし、私は、ウィンドウオブジェクトから任意のアクションが表示されません。 この機能はどのように実装できますか?

+0

モーダルなどを使用していますか?それとも、あなた自身のポップアップを実装しましたか? – Tugrul

+0

@TugrulAsikモーダルではありません。リダイレクトですので、window.open()を使用します。 – Ludo

+0

モーダル(カスタマイズ)を使用すると、共通のコンポーネントを簡単に開発できます。 – Tugrul

答えて

1

あなたが行動を望んで必要な派遣するloginSuccess方法にオープナーウィンドウへの参照を追加することができます

const store = redux.createStore(reducer); 
window.loginSuccess = function(user) { 
    store.dispatch(sampleActionCreator(user)); 
}; 

は今、あなたは子供から window.opener.loginSuccess()にアクセスすることができます。

0

私のプロジェクトでは、トリガする親コンポーネントにポップアップ/モーダルなどを管理し、パラメータなどをポップアップに渡します。 ポップアップページはプレゼンテーションの責任を負います。すべての動作(サービスレイヤからのサービスコール、reduxバインド)は私の親コンポーネントにあります。

私はsthを変更する必要があるので、私はbehaviors(funcs)とpropsをポップアップに渡します。私はちょうど還元状態を更新します。 reduxのようなデータ指向アーキテクチャーを使用する場合は、コンポーネントの管理が容易です。

私はあなたにお勧めします。独自の行動、独自の行動を持つ行動コンポーネントのようなダミーのプレゼンテーションコンポーネントは使用しないでください。

+0

私も同じことをしますが、ここでは、ポップアップがユーザーをリダイレクトするため、別のユースケースについて説明します。 – Ludo

+0

うん、それはLudoだ。 – Tugrul

0

親ウィンドウと子ウィンドウの間にmessaging APIを使用できます。 リンク内の例を見て、受信したいメッセージにイベントリスナーを実装する必要があることに注意してください。それに応じてアクションをディスパッチできます。

+0

興味深いAPIですが、子ウィンドウが(event.sourceにアクセスするための)メッセージを受け取った後でのみ親ウィンドウに応答できるように見えます。そして、私のケースでは、子がいつリダイレクトを達成するかを知ることができません。 親はメッセージを最初に送信することなく子供からのメッセージを処理する準備ができている必要があります(ユーザーは接続を受け入れるか拒否するかを2秒または2分待つことができます...) – Ludo

+0

ごめんなさい、まだpostMessageでこれを行うことができます。私は私のブログで良い例を持っていますが、jQueryを使用すると、それをあなたが望むどんなフレームワークにも簡単に翻訳できます。 http://www.dimagimburg.com/authentication-and-login-popup-window-handling-for-social-medias-code-example/あなたがする必要があるのは、メッセージの投稿を処理するコールバックページを作ることです親ページに移動します。あなたはそれについての質問があれば私に尋ねること自由に感じる –

関連する問題