Вход в API из приложения для Android с использованием паспорта laravel 5.3

Два дня копаюсь в гугле, но не могу найти начальную ветку по моей проблеме, теперь у меня нет возможности. Пожалуйста, помогите мне с некоторым направлением / как

У меня есть веб-приложение, созданное с помощью laravel 5.3, я установил паспорт, как описано здесь . если я пойду /home он показывает отлично.

Главная страница

Теперь мне нужно сделать приложение для Android, из которого

  1. Уже существующий пользователь веб-приложения может войти
  2. получить весь список задач этого пользователя TaskModel (ons_tasks(id, title, description))

только связанные маршруты

в веб.php

Auth::routes();

в апи.php

Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:api');


Route::group(['middleware' => ['auth:api']], function () {

    Route::get('/test', function (Request $request) {
        return response()->json(['name' => 'test']);
    });

    Route::get('/task/list', function (Request $request) {        
        $list = \App\Model\TaskModel::all();
        return response()->json($list);
    });

});

Для входа в систему: если я отправлю почтовый запрос /login с адресом электронной почты и паролем, я получу ошибку TokenMismatchException, но где я могу получить токен для приложения Android на мобильном устройстве? Нужен ли мне Auth::routes() в апи тоже? если тогда что еще мне нужно просто войти в систему и получить токен, чтобы позже я мог отправить его для получения списков задач.

Во-вторых,

Если я перехожу на /api/test, он перенаправляет меня на /home страницу без каких-либо ошибок !!!

Заранее спасибо.


person Atiqur    schedule 09.03.2017    source источник
comment
Привет ты решил это?   -  person utdev    schedule 18.07.2017


Ответы (1)


Для аутентификации с помощью API с поддержкой Passport

В этой ситуации вам потребуется использовать клиент предоставления пароля, см. этот раздел документации Passport.

После того, как вы создали клиент предоставления пароля, используя:

 php artisan passport:client --password

Вам нужно будет запросить токен доступа из вашего приложения и отправить его с вашими последующими запросами, чтобы получить доступ к защищенным маршрутам промежуточного программного обеспечения auth:api.

Чтобы получить токен доступа, отправьте запрос на маршрут /oauth/token вашего приложения (очевидно, это реализация PHP, убедитесь, что вы правильно форматируете запрос ниже в своей реализации Java):

$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);

Убедитесь, что вы добавили client_secret и client_id, которые были возвращены из вышеприведенного вызова ремесленника, и убедитесь, что username и password ссылаются на действительного пользователя в вашей базе данных.

Если здесь все в порядке, вы должны получить в ответ access_token и refresh_token. access_token — это то, что вам нужно для аутентификации с использованием защиты auth:api. Чтобы правильно передать это обратно в ваш API, вам нужно будет отправить ваши последующие запросы с заголовками Authorization: Bearer <your accessToken> и Accept: application/json

Например, чтобы получить доступ к тестовому маршруту:

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

Если вы установили их правильно, вы должны увидеть ответ JSON с указанным вами массивом.

Почему /api/test перенаправляет меня без ошибок?

Вы запрашиваете маршрут с промежуточным ПО auth:api. Это перенаправит вас, поскольку вы не указали правильные заголовки, как описано выше, это ожидаемое поведение.

Надеюсь это поможет.

person Aaron Fahey    schedule 11.06.2017
comment
Я начинаю читать о Laravel Passport. Если токены предоставления пароля не используются, токены авторизации не выдаются? (а сеанс создается в другом проекте Laravel?) Из документации Laravel This allows you to issue access tokens securely to your first-party clients without requiring your users to go through the entire OAuth2 authorization code redirect flow. Что это значит? - person Luke Galea; 05.11.2020