0

後に反応するように戻ってリダイレクト私はhttp://localhost:8080ReactJS +春社会(フェイスブック)+認証

上で実行されている私のバックエンド(春ブーツ)アプリケーションを持って、私は私のフロントエンドを持っている(JSを反応させる)http://localhost:3000

マイ上で動作するアプリケーションフロントエンドサインインボタンは、バックエンドアプリケーションでオータムダンスを行うFacebook(http://localhost:8080/connect/facebook)で認証します。これはspring-socialプラグインで無料で提供されています。

正常に認証された後、facebookConnected.html http://localhost:8080/handle-successful-authenticationにリダイレクトされています。このバックエンドアプリケーションは、認証後ロジックを処理するエンドポイントです。

これを処理したら、コントロールをフロントエンドに戻すにはどうしたらいいですか?

+0

フロントエンドはバックエンドに制御権を渡しません。バックエンドはコントロールを戻すことは決してありません。フロントエンドはバックエンドに依頼します。依然として制御が可能であり、作業を継続することも、バックエンドがビルドと応答を終了するまで待機することもできます。バックエンドコントローラが戻ったら、それがバックエンドの対話の終わりです。 –

+0

どうやって解決しましたか? – kevcodez

+0

@kevcodezこの記事で提案したリダイレクトコールを上書きするカスタムコントローラを追加しました:http://www.littlebigextra.com/how-to-change-the-default-spring-social-redirect-flow/ – alphathesis

答えて

0

refererヘッダーをチェックして、それがあなたのニーズに合っているかどうか確認してください。成功したログインプロセスの後にリダイレクトするために使用してください。手動春に多くの作品を構成している場合SimpleUrlAuthenticationSuccessHandler

@Bean 
public AuthenticationSuccessHandler successHandler() { 
SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler(); 
    handler.setUseReferer(true); 
    return handler; 
} 

を使用するためのthis answerを確認するか - あなたは、フィルタの位相にリファラURLを取得するためthis answer を使用してセッションに保存することができます。私が見るとしてではなく、このリダイレクトがオーバーヘッドである - ので、あなたは、「... - 成功した認証を扱う」procesing後にリダイレクトすることができOAuth2ClientAuthenticationProcessingFilterを拡張し、のdoFilterでリファラ値

public class MyOAuth2ClientAuthenticationProcessingFilter extends OAuth2ClientAuthenticationProcessingFilter { 
... 
@Override 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
     throws IOException, ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    String referrer = request.getHeader("Referer");   
    if (null != referrer) 
     request.getSession().setAttribute("url_prior_login", referrer); 

    super.doFilter(req, res, chain); 
    } 
} 

を得る:その答えの 一つの修正は可能性があり、どこかこのロジックを配置しよう

successHandlerを()のようになります(例えばsuccessHandler()またはpricipalExtractorを()UserInfoTokenServicesにあなたが社会的にOAuthプロバイダからより多くのユーザの詳細情報が必要な場合。):

@Bean 
public AuthenticationSuccessHandler successHandler() { 
    AuthenticationSuccessHandler rst = new AuthenticationSuccessHandler() { 
    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, 
       Authentication authentication) throws IOException, ServletException { 
      ... 
      HttpSession session = request.getSession(); 
      String redirectUrl = null; 
      if (session != null) { 
       redirectUrl = (String) session 
         .getAttribute("url_prior_login"); 

      if (null == redirectUrl || redirectUrl.trim().length() <= 0) 
       redirectUrl = "http://your_default_redirect_url"; 

      response.sendRedirect(redirectUrl); 
     }; 
     return rst; 
} 

とにかくチェックスプリングdocs

関連する問題