2017-03-09 3 views
3

Für zwei Tage graben ich Google aber konnte nicht den Startfaden für mein Problem finden, jetzt bin ich aus der Option. Bitte helfen Sie mir mit einer Richtung/HowToAPI-Login von Android-App mit Laravel 5.3 Pass

Ich habe eine Webanwendung läuft mit Laravel 5.3 gebaut, ich habe Passport wie beschrieben here installiert. Wenn ich /home gehe, zeigt es sich perfekt.

Home page

Jetzt muss ich eine Android-App machen, aus dem

  1. Eine bereits vorhandene Benutzer von Web-App anmelden können
  2. erhalten alle die Aufgabenliste des Benutzers TaskModel (ons_tasks(id, title, description))

Routen nur bezogen

anzumelden: wenn ich Post-Anforderung senden /login mit E-Mail & Passwort ein TokenMismatchException Fehler erhalten, aber Wo finde ich ein Token für Android App im Handy erhalten? Benötige ich auch die Auth::routes() in der API? wenn dann was sonst muss ich mich nur anmelden und bekomme ein Token, damit ich es später zum Senden der Aufgabenlisten senden kann .

Zweitens

Wenn ich /api/test gehen es leitet mich auf /home Seite ohne einen Fehler showning !!!

Vielen Dank im Voraus.

+0

Hallo, hast du das gelöst? – utdev

Antwort

1

mit Ihrem Passport-fähigen API

Sie müssen die Authentifizierung des Kennworts Grants-Client in dieser Situation verwenden, this section of Passport's documentation sehen.

Sobald Sie eine Passwort Grant-Client generieren, mit:

php artisan passport:client --password 

Sie benötigen einen Zugriffstoken aus Ihrer Anwendung zu beantragen, und es mit Ihren nachfolgenden Anforderungen, um die geschützten Auth zuzugreifen senden : api Middleware Routen.

ein Zugriffstoken zu erhalten, /oauth/token Route eine Anfrage an Ihre App senden (dies ist eine PHP-Implementierung offensichtlich, sicherzustellen, dass Sie richtig unten Anfrage Formatierung in Ihrer Java-Implementierung):

$http = new GuzzleHttp\Client; 

$response = $http->post('http://your-app.com/oauth/token', [ 
    'form_params' => [ 
     'grant_type' => 'password', 
     'client_id' => '<client id returned from the artisan command above>', 
    ' client_secret' => '<secret returned from artisan command above>', 
     'username' => '[email protected]', 
     'password' => 'my-password', 
     'scope' => '', 
    ], 
]); 

return json_decode((string) $response->getBody(), true); 

Vergewissern Sie sich die hinzufügen client_secret und client_id, die vom oben genannten Handwerkeranruf zurückgegeben wurden, und sicherstellen, dass username und password einen gültigen Benutzer in Ihrer Datenbank referenziert.

Wenn hier alles in Ordnung ist, sollten Sie eine access_token und refresh_token in der Antwort erhalten. Die access_token ist, was Sie mit dem auth:api Wächter authentifizieren müssen. Um richtig diese zurück zu Ihrem api passiert, müssen Sie Ihre nachfolgenden Anforderungen mit den Header senden Authorization: Bearer <your accessToken> und Accept: application/json

Zum Beispiel für den Zugriff auf Ihre „test“ Route:

$response = $client->request('GET', '/api/test', [ 
    'headers' => [ 
     'Accept' => 'application/json', 
     'Authorization' => 'Bearer '. <accessToken from /oauth/token call>, 
    ], 
]); 

Wenn Sie festgelegt haben Sie sollten eine JSON-Antwort mit dem von Ihnen angegebenen Array sehen.

Warum leitet/api/test mich ohne Fehler um?

Sie benötigen eine Route mit der auth:api Middleware. Dadurch werden Sie umgeleitet, da Sie nicht wie oben beschrieben die richtigen Header angegeben haben. Dies ist das erwartete Verhalten.

Hoffe, das hilft.