我在玩游戏时遇到了重定向问题!形成。我认为问题在于我如何处理路线。想法是用户应该能够通过使用登录来使用secruity密钥首先通过index.hmtl,或者直接在包含access_token的有效路径中输入(使用qr-code重定向)来访问dashboard.html
我想做的是如下:
这是我的表单(位于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>
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
如果我通过以下网址直接调用仪表板(String access_token),仪表板路径可以正常工作:http://localhost:9000/dashboard?access_token=0000 但是如果我尝试使用调用authenticate(String key)的登录表单进行登录,我会得到这个URL http://localhost:9000/dashboard?access_token&key=1234,其中key是发送给auth()函数的var。显然我的错是路线,但我已经尝试并测试了逻辑,我100%肯定它是合理的。 我正在使用Play 1.2.4 我花了两天时间来处理这个问题,并且对任何建议都非常感激。
答案 0 :(得分:1)
这实际上似乎是一个错误。也许试试
redirect("/dashboard?access_token="+access_token);
而不是
dashboard(access_token);
答案 1 :(得分: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
答案 2 :(得分:0)
解决了问题!
我忘了提到... oops是我也在使用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>