我正在学习laravel框架,我已经安装了5.0版本。
我将它用于 json api 服务,该服务将在调用特定路由后提供 JSON 输出。
如果我从浏览器请求 URL,它效果很好。但是当我尝试从我的 Android 应用程序访问时,它会给出错误,即文件未找到异常(java.io.filenotfoundexception)。
检查日志后,我发现 laravel 有 Token Mismatch Exception 错误。 Laravel 需要 csrf 令牌才能访问其资源。
我可以选择禁用该身份验证,但它似乎不太安全。
我可以以某种方式允许从我的 Android 应用程序而不是其他应用程序访问 laravel 应用程序吗?我们可以从 Android 应用程序指定 csrf 密钥吗?
如果您不想禁用 CSRF 令牌,则需要在一个请求中检索 CSRF,然后将检索到的令牌与 POST 请求一起传递。
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
// Get the CSRF token
httpClient.execute(new HttpGet("http://www.yoursite.com/"));
CookieStore cookieStore = httpClient.getCookieStore();
List <Cookie> cookies = cookieStore.getCookies();
for (Cookie cookie: cookies) {
if (cookie.getName().equals("XSRF-TOKEN")) {
CSRFTOKEN = cookie.getValue();
}
}
// Access POST route using CSRFTOKEN
HttpPost httppost = new HttpPost("http://www.yoursite.com/your-post-route");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("_token", CSRFTOKEN));
nameValuePairs.add(new BasicNameValuePair("stringdata", "Hello!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)