3

我在从剧中重定向时遇到问题!形式。我认为问题在于我如何处理路线。这个想法是,用户应该能够通过 index.hmtl 使用安全密钥登录,或者直接在包含 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

如果我通过以下 URL 直接调用仪表板(字符串 access_token),仪表板路由工作正常:http://localhost:9000/dashboard?access_token=0000 但是如果我尝试使用调用身份验证的登录表单登录(字符串键) 我得到这个 URL http://localhost:9000/dashboard?access_token&key=1234其中 key 是发送到 auth() 函数的 var。显然我的错在于路线,但我已经尝试并测试了逻辑,我 100% 确定它是正确的。我正在使用 Play 1.2.4 我在这个问题上花了两天时间,如果有任何建议,我将不胜感激。

4

3 回答 3

1

这实际上似乎是一个错误。也许试试

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

代替

dashboard(access_token);
于 2012-04-24T01:18:06.093 回答
1

Java 代码看起来不错。以防万一,您是否尝试将路由文件更改为:

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

在 POST 之前移动 GET(顺序很重要,如果该部分存在 Play 错误,则应该修复它)。

另一种选择是简单地重命名 POST 路由,以解决由具有相同“路径”的两条路由引起的问题。

# Home page 
GET     /                    Application.index
GET     /dashboard           Dashboard.dashboard
POST    /dashboard/auth      Dashboard.authenticate
于 2012-04-25T07:54:03.447 回答
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 网站上的说明: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 回答