2015-07-25 21 views
6

Tôi nghiêng khuôn khổ laravel, tôi đã cài đặt phiên bản 5.0. tôi sử dụng nó cho dịch vụ json api sẽ cung cấp đầu ra JSON sau khi gọi một số tuyến đường nhất định. hoạt động rất tốt nếu tôi hỏi lại URL từ trình duyệt. nhưng khi tôi đang cố gắng truy cập từ ứng dụng Android của tôi, nó cho lỗi mà tập tin không tìm thấy ngoại lệ (java.io.filenotfoundexception). sau khi kiểm tra nhật ký tôi đã nhận được điểm rằng laravel có lỗi của Token Mismatch Exception. laravel cần mã thông báo csrf để truy cập tài nguyên. Tôi có tùy chọn mà tôi có thể vô hiệu hóa xác thực đó nhưng có vẻ như cách an toàn hơn.truy cập ứng dụng laravel từ ứng dụng Android với CSRF thẻ

làm cách nào để tôi có thể cho phép truy cập ứng dụng laravel từ ứng dụng Android của tôi không phải từ ứng dụng khác? chúng ta có thể chỉ định khóa csrf từ ứng dụng android không?

+0

Câu trả lời của tôi là những gì bạn đang tìm kiếm? Tôi có thể làm gì để cải thiện nó? –

Trả lời

10

Nếu bạn không muốn tắt mã thông báo CSRF, bạn sẽ cần truy xuất CSRF trong một yêu cầu, sau đó chuyển mã thông báo đã truy xuất cùng với yêu cầu POST của bạn.

// 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 
} 
+1

nhưng bằng cách sử dụng tôi nghĩ rằng bất kỳ ứng dụng Android có thể truy cập của tôi api – ddw147

+2

đúng, hạn chế những người có thể sử dụng ứng dụng của bạn là một vấn đề "xác thực/uỷ quyền", không phải là một vấn đề CSRF. CSRF chỉ xác minh rằng yêu cầu POST đến từ cùng một ứng dụng khách đã thực hiện yêu cầu GET trước đó, nó không hạn chế ai có thể sử dụng trang web. Tôi có hiểu nhầm câu hỏi của bạn không? –

+0

ok bây giờ tôi đã nhận nó, cảm ơn vì câu trả lời – ddw147

Các vấn đề liên quan