3

プレイからのリダイレクトに問題があります。形。問題は、ルートの処理方法にあると思います。ユーザーは、最初にセキュリティ キーを使用して login from index.hmtl にアクセスするか、(qr コード リダイレクトを使用して) access_token を含む有効なパスを直接入力することにより、dashboard.html にアクセスできる必要があります。

私がやろうとしていることは次のとおりです。

1) index.html のフォームを使用してログイン (ルート: Application.index)

これが私のフォームです(index.htmlにあります):

<form action="@{Dashboard.authenticate()}" method="POST" name="login">
    <input name="key" type="password" maxlength="128" value="${flash.key}">
    <input class="button" id="btnLogin" type="submit" value="Login">
</form>

2) 認証して、dashboard.html にリダイレクトします (ルート: Dashboard.dashboard)

public static void dashboard(String access_token) {
   /*
      ...some code
   */

    render(username);
}


public static void authenticate(String key) {
   /*
      ...some code
   */
     dashboard(access_token);
}

ここに私のルートファイルがあります:

# Home page 
GET     /                   Application.index
POST    /dashboard      Dashboard.authenticate
GET     /dashboard      Dashboard.dashboard

http://localhost:9000/dashboard?access_token=0000のような URL から直接 Dashboard(String access_token) を呼び出すと、ダッシュボード ルートは正常に機能 しますが、認証時に呼び出すログイン フォームを使用してログインしようとすると (String key ) この URL http://localhost:9000/dashboard?access_token&key=1234を取得します。keyは auth() 関数に送信される変数です。明らかに私のせいはルートにありますが、私はロジックを試してテストしましたが、それが健全であることは 100% 確信しています。私は Play 1.2.4 を使用しています。この問題に 2 日間費やしましたが、何か提案があればよろしくお願いします。

4

3 に答える 3

1

Javaコードは問題ないようです。念のため、routesファイルを次のように変更しようとしましたか?

# Home page 
GET     /                   Application.index
GET     /dashboard      Dashboard.dashboard
POST    /dashboard      Dashboard.authenticate

POSTの前にGETを移動します(順序が重要です。そのセクションにPlayのバグがある場合は、これで修正されます)。

もう1つのオプションは、POSTルートの名前を変更するだけで、両方のルートが同じ「パス」を持っていることが原因である場合に問題を修正することです。

# Home page 
GET     /                    Application.index
GET     /dashboard           Dashboard.dashboard
POST    /dashboard/auth      Dashboard.authenticate
于 2012-04-25T07:54:03.447 に答える
1

それは実際にはバグのようです。たぶん試してみてください

redirect("/dashboard?access_token="+access_token);

それ以外の

dashboard(access_token);
于 2012-04-24T01:18:06.093 に答える
0

問題が解決しました!

私が言及するのを忘れていたのは...おっと、私はjQuery Mobileも使用していて、問題はPlayに関係していたということでした! ルーティングが jQuery Mobile ページのルーティングをオーバーライドしています。

次のスクリプトを追加して、ルーティングを無効にしました。

$(document).bind("mobileinit", function(){
    $.mobile.ajaxEnabled = false;
    $.mobile.linkBindingEnabled = false;
    $.mobile.hashListeningEnabled = false;
    $.mobile.pushStateEnabled = false;
    $.mobile.changePage.defaults.changeHash = false;

})

jQuery Web サイトの手順を使用する: http://jquerymobile.com/test/docs/api/globalconfig.html上記を実装しましたが、スクリプトは次の順序で .hmtml ヘッダーで参照する必要があります。

<script src="jquery.js"></script>
<script src="custom-scripting.js"></script>
<script src="jquery-mobile.js"></script>
于 2012-04-25T15:06:55.850 に答える