2015-07-25 2 views
6

Sono appoggiato framework laravel, ho installato la versione 5.0. lo uso per il servizio json api che darà l'uscita JSON dopo aver chiamato un determinato percorso. funziona molto bene se richiedo l'URL dal browser. ma quando sto provando ad accedere dalla mia app per Android dà errore che il file non ha trovato eccezione (java.io.filenotfoundexception). dopo aver controllato il registro ho capito che laravel ha un errore di Eccezione non corrispondenza token. laravel ha bisogno del token csrf per accedere alle risorse. Ho un'opzione che posso disabilitare quell'autenticazione ma sembra un modo meno sicuro.accesso laravel app da app Android con token csrf

in qualche modo posso consentire l'accesso all'app di laravel dalla mia app per Android non da altre app? possiamo specificare la chiave csrf dall'app Android?

+0

La mia risposta è quello che stai cercando? Qualche cosa posso fare per migliorarlo? –

risposta

10

Se non si desidera disabilitare i token CSRF, è necessario recuperare il CSRF in una richiesta, quindi passare il token recuperato insieme alla richiesta 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 
} 
+1

ma utilizzando penso che qualsiasi app Android possa accedere alla mia correzione – ddw147

+2

, limitare chi può utilizzare la tua app è un problema di "autenticazione/autorizzazione", non un problema CSRF. CSRF verifica solo che una richiesta POST provenga dallo stesso client che ha effettuato una richiesta GET precedente, ma non limita chi può utilizzare il sito. Ho perso, capisci la tua domanda? –

+0

ok ora ho capito, grazie per la risposta – ddw147