2016-06-15 12 views
0

Ich wollte auf mein Back-End mit Android-Handy zugreifen. In diesem Moment möchte ich zwei Dinge tun:So senden/POST JWT-Token von Android zu Laravel Backend

  1. Einloggen die Mob App nach der Authentifizierung aus dem Back-End.
  2. Daten zum Back-End hochladen (Back-End ist PHP mit Laravel Framework).

i erste E-Mail und Passwort an das Backend senden und wieder eine Antwort von JWT Token wie gezeigt bekommen:

"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEsImlzcyI6Imh0dHA6XC9cLzE5Mi4xNjguMS4xMDI6ODAwMFwvYXBpXC92M1wvYXV0aGVudGljYXRlIiwiaWF0IjoxNDY2MDA5OTY3LCJleHAiOjE0NjYwMTM1NjcsImp0aSI6IjZjYjBlMTRjYTNkMjAzM2Q4OWM0NzM1M2ZjNjMzZTU2In0.GJGUjgy8U-uqjLSqJcysDTmgrNvxBHH03iBflLjsOwA"

Sobald die oben Token an die zurück mob app, ich möchte dasselbe zurückgegebene token für eine weitere post-anfrage senden, da das oben genannte jwt token mein schlüssel für den Zugriff auf das back-end ist.

Also liegt mein Problem darin, das gleiche Token zurück zum Back-End zu senden. es scheint einfach und strikt vorwärts, da ich bereits begonnen habe, mit meinem Backend zu kommunizieren, und ich habe auch meine Antwort überprüft, indem ich Postmann benutzte.

loging in

und ich kann bekam auch den Benutzer cridential die jwt Token auf Postbote mit.

postman receive user cridentials as json

jetzt das gleiche Token, das auf Postbote arbeitet funktioniert nicht für mein Android. Ich weiß, dass mein httpClient und mein httpPost funktionieren, da ich die E-Mail und das Passwort bereits gesendet habe. Ich weiß auch, dass meine Android-Post-Anfrage den Server erreicht, da mein zurückgegebenes Ergebnis mit einer Fehlermeldung, die ich für eine akzeptierte Token-Anfrage erstellt habe, kommt, wie unten gezeigt.

when android recives user cridentials as json

, wie Sie aus der obigen Momentaufnahme zu sehen. Ich erhalte das Token zuerst in einem Zitat (zuerst hervorgehoben), wenn es zur Authentifizierung gepostet wird. also entfernte ich das angebot und postete das gleiche token, um user crilential zu bekommen, aber diesmal bekam ich eine fehlerantwort, die ich auf dem back-end aufgebaut habe.

deshalb denke ich, dass mein Token nicht ordnungsgemäß zum Server geht. aber ich konnte das Problem nicht beheben. aber ich denke, die Token-Größe ist groß, mit einer Länge von 490. Also wie soll ich mein Token mit der httpPost Anfrage anhängen?

public String getJsonString2(String url, String jwtString) { 

     String jsonString = ""; 

     HttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     List nameValuePair = new ArrayList(1); 
     nameValuePair.add(new BasicNameValuePair("token", jwtString)); 
     try { 
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 
     } 
     catch (UnsupportedEncodingException e) { 
      // writing error to Log 
      e.printStackTrace(); 
     } 

     // Making HTTP Request 
     try { 
      HttpResponse response = httpClient.execute(httpPost); 
      jsonString = EntityUtils.toString(response.getEntity(), HTTP.UTF_8); 

     } catch (ClientProtocolException e) { 
      // writing exception to log 
      e.printStackTrace(); 

     } catch (IOException e) { 
      // writing exception to log 
      e.printStackTrace(); 
     } 

     return jsonString; 

    } 

Ich habe versucht, auch für die Analyse der Parameter (Token in meinem Fall), aber die MultipartEnityBuilder Bibliothek wurde crasshing mein Programm, wenn Gebäude mit MultipartEntityBuilder:

die mein Code für die die Anfrage Aufbau ist unten dargestellt MultipartEnityBuilder Bibliothek wird zu meinem Projekt hinzugefügt, um die folgenden Abhängigkeiten mit:

//for accessing the MultipartEntity lbrary 
compile "org.apache.httpcomponents:httpcore:4.2.4" 
compile "org.apache.httpcomponents:httpmime:4.3" 

der Fehler aufgrund der MultipartEntity

So jetzt meine Frage ist: Wie kann ich den JWT Token-Wert von Android Laravel Backend senden.

+0

Token nicht als Formulardaten für JWT versendet werden können. Siehe [this] (https://github.com/typondesigns/jwt-auth/wiki/Authentication). – linuxartisan

Antwort

0

Ich habe es geschafft, mein Problem zu lösen, indem sie einfach mit dem Token des Authorization-Header Einstellung:

public String getJsonString2(String url, String jwtString) { 

    String jsonString = ""; 

    // Creating HTTP client and post 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(url); 

    httpPost.setHeader("Authorization", "Bearer \\{" + jwtString + "\\}"); 

    // Making HTTP Request 
    try { 
     HttpResponse response = httpClient.execute(httpPost); 
     jsonString = EntityUtils.toString(response.getEntity(), HTTP.UTF_8); 
     System.out.println("Http String content: " + jsonString); 
    } catch (ClientProtocolException e) { 
     // writing exception to log 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // writing exception to log 
     e.printStackTrace(); 
    } 
    return jsonString; 
} 
0

Vielleicht versuchen Sie stattdessen mit MultipartEntity und erstellen Sie einen "Teil" für das Token. Ich habe this closely related answer zu Ihrem Fall angepasst:

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url); 
//here you create the token body  
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
builder.addTextBody("token", jwtString, ContentType.TEXT_PLAIN); 
HttpEntity reqEntity = builder.build(); 
httppost.setEntity(reqEntity); 

HttpResponse response = httpclient.execute(httppost); 
HttpEntity resEntity = response.getEntity(); 

Ich hoffe, das hilft, bitte versuchen Sie es und lassen Sie es mich wissen.

Sie können dieses blog on Multipart Upload with HttpClient besuchen und mehr erfahren.

+0

StringBody und MultipartEntity Klasse existiert nicht und ich konnte es auch nicht importieren – Lakie

+0

Ich habe die Antwort aktualisiert und stattdessen 'MultipartEntityBuilder' verwendet - sehen Sie, ob Sie diesen importieren können - auch, bitte bestätigen Sie Ihre Version von' HttpClient' library . – ishmaelMakitla

+0

Ich habe den MultipartEntityBuilder importiert aber verknallt, wenn ich es ausführe. Die Bibliothek, die ich verwendet habe, ist es. 'compile' "'org.apache.httpcomponents: httpcore: 4.2.4'" 'kompilieren' "'org.apache.httpcomponents: httpmime: 4.3'" ... die HttpClient-Bibliothek ist mit IntelliJ IDEA (org. apache.http.client.HttpClient) – Lakie

Verwandte Themen