2016-11-24 9 views
3

Auth0をspark-javaフレームワークを使用する私のWebアプリケーションに統合しようとしています。 問題は認証が完全に機能している間です(コールバックを含む)(Auth0のWebサイトで作成された新しいユーザーが表示され、Webサイトがリダイレクトされるのがわかります)、ログインしたユーザー情報にアクセスできません。私はSessionUtils.getAuth0User(request.raw())のようないくつかの方法を試しましたが、どれも働いていません。 は、例えばここに提供チュートリアルで:私はスパークと似た何かをやってみましたが、GETはスパークで少し動作が異なりますので、私はこれを行うログインユーザーnull Auth0/Spark Java

 @Override 
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    final Auth0User user = SessionUtils.getAuth0User(req); 
    if (user != null) { 
     req.setAttribute("user", user); 
    } 
    req.getRequestDispatcher("/WEB-INF/jsp/home.jsp").forward(req, res); 
} 

https://github.com/auth0-samples/auth0-servlet-sample/tree/master/01-Login 彼らはそうのようなユーザ情報でログインしてアクセスします:

port(Integer.valueOf(System.getenv("PORT"))); 
staticFileLocation("/spark/template/freemarker"); 
String clientId = System.getenv("AUTH0_CLIENT_ID"); 
String clientDomain = System.getenv("AUTH0_DOMAIN"); 
    get("/", (request, response) -> 
    { 
     Map<String, Object> attributes = new HashMap<>(); 
     Auth0User user = SessionUtils.getAuth0User(request.raw()); 
     if(user != null) { 
      attributes.put("user", user); 
      attributes.put("loggedIn" , true); 
     } 
     else 
      attributes.put("loggedIn" , false); 
     attributes.put("clientId" , clientId); 
     attributes.put("clientDomain" , clientDomain); 
     return new ModelAndView(attributes, "index.ftl"); 
    }, new FreeMarkerEngine()); 

コードは常に、ユーザーが作成され、データベースに保存され、サインインが無いランタイムやコンソールエラーが発生して正常に動作しているにもかかわらず、ヌルとしてユーザーを報告しています。私が試した他の方法私は、ユーザー変数を設定し、次のように書いた行を置き換えました。
代替方法1:ここ
Auth0User user = (Auth0User) request.session().attribute("auth0User");
auth0Userがここで参照そのソースコードに示すように、同じ文字列リテラルAuth0がSessionUtilsのそれらの実装で使用している:https://github.com/auth0/auth0-java-mvc-common/blob/master/src/main/java/com/auth0/SessionUtils.java

代替方法2:
Auth0User user = (Auth0User) request.raw().getUserPrincipal();

さらに、これは認証用のクライアント側を実行しているjavascriptコードです。

var lock = new Auth0Lock('${clientId}', '${clientDomain}', { 
     auth: { 
      redirectUrl: 'http://localhost:5000/build', 
      responseType: 'code', 
      params: { 
      scope: 'openid user_id name nickname email picture' 
      } 
     } 
    }); 

    $(document).ready(function() 
    { 
     $('.signup').click(function() 
     { 
      doSignup(); 
     }); 
    }); 

    function doSignup() { 
     lock.show(); 
    } 

私は毎回nullに評価されている理由がわかりませんし、私が間違っていることについていくつかのフィードバックが大好きです。ありがとう。

+0

こんにちは、あなたはあなたのリクエスト/応答の詳細をブローサーで表示してください(スクリーンショット)? – Andrew

答えて

1

nullユーザーインスタンスをSessionUtils.getAuth0User(req)から取得するには、最初にSessionUtils.setAuth0Userを呼び出す必要があります。これは、ユーザーが成功して認証されたという確認を受け取ったときに実行する必要があります。

auth0-servlet-sampleでは、これは、/callbackエンドポイントに対して実行された要求を処理するAuth0ServletCallbackを構成することによって行われました。 Auth0ServletCallbackは、あなたのために設定されたユーザを呼び出すので(下のコードを参照)、サーブレットの例では成功したユーザを取得できます。利用可能なサンプル(auth0-servlet-sample、​​、auth0-spring-mvc-sampleauth0-spring-security-api-sampleauth0-spring-security-mvc-sample)はspark-javaのための1つを含んでいないので、私は任意のサンプルにあなたを参照することはできません現時点では

protected void store(final Tokens tokens, final Auth0User user, final HttpServletRequest req) 
{ 
    SessionUtils.setTokens(req, tokens); 
    SessionUtils.setAuth0User(req, user); 
} 

。あなたは、対応するSessionUtils.getAuth0Userメソッドを使用したい場合は

これを解決するために、あなたのspark-javaアプリケーションに成功した場合に認証操作の結果を処理するために追加のロジックを含める必要があり、自分SessionUtils.setAuth0Userを呼び出します。

WebアプリケーションとAuth0チェックIntegrating a Web App with Auth0との統合に関する一般的なガイダンスについては、こちらをご覧ください。

+0

ありがとう、私はそれがsetAuth0Userを呼び出していたことを忘れたとは思わない。私は今、最終的な検証のためにサーバーに渡す前に、認証クライアント側を処理するようになっています。 – kcilc

関連する問題