Laravel - Интеграция Passport API |Ошибка: {"message": "Не аутентифицирован."} - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в Laravel.Я только начал изучать Laravel интеграцию паспорта, используя эту ссылку .

Ниже приведен мой файл маршрута api.php

Route::post('login', 'API\PassportController@login'); // this is working fine
Route::post('register', 'API\PassportController@register'); // this is working fine
Route::group(['middleware' => 'auth:api'], function(){
   Route::post('get-details' , 'API\PassportController@getDetails'); // This is giving me error
});

PassportController.php >> getDetails() код функции,

/**
 * details api
 *
 * @return \Illuminate\Http\Response
 */
public function getDetails()
{
    $user = Auth::user();
    return response()->json(['success' => $user], $this->successStatus);
}

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Я обновил остальные файлы, как указано в статье .

API регистрации и входа в системуработают нормально, но когда я пытаюсь запустить /get-details API, я получаю {"message":"Unauthenticated."} в ответ.

В заголовках я передаю значения, как показано ниже, enter image description here

Странно то, что тот же код работает нормально на моем локальном сервере (OS-Windows), но когда я запускаю этот API на моем хост-сервере (OS-Ubuntu), он не работает.

Можеткто-нибудь помочь мне в решении этой проблемы?Это связано с настройками конфигурации сервера?Я даже не могу отладить этот код, чтобы проверить, где я делаю неправильно.

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

Ответы [ 5 ]

0 голосов
/ 08 июня 2018

попробуйте установить пакет laravel-cors и добавить заголовок Authorization в параметр allowHeaders , предоставляемый пакетом.

'allowedHeaders' => ['Authorization']

Может быть, это может решить проблему с отправкой заголовка.

или вам может потребоваться изменить настройку apache

0 голосов
/ 31 мая 2018

Отредактируйте ваш файл .htaccess, возможно, есть проблема с конфигурацией.

RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
0 голосов
/ 31 мая 2018

auth: api middleware ожидает, что запрос поступит через JSON.

Он ищет X-Requested-With: XMLHttpRequest в заголовках входящего запроса.Когда он не может его найти, он попадает в метод без проверки подлинности в app / Exceptions / Handler и возвращает ошибку.

Если вы добавите X-Requested-With: XMLHttpRequest к заголовкам вашего запроса, это должно решить проблему.

0 голосов
/ 31 мая 2018

Вы добавили Passport :: routs ();в AuthServiceProvider

<?php

 namespace App\Providers;

 use Laravel\Passport\Passport;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Foundation\Support\Providers\AuthServiceProvider as 
 ServiceProvider;

 class AuthServiceProvider extends ServiceProvider
 {
/**
 * The policy mappings for the application.
 *
 * @var array
 */
protected $policies = [
    'App\Model' => 'App\Policies\ModelPolicy',
];

/**
 * Register any authentication / authorization services.
 *
 * @return void
 */
  public function boot()
  {
    $this->registerPolicies();
    Passport::routes();
    Passport::tokensExpireIn(now()->addDays(15));
    //Passport::refreshTokensExpireIn(now()->addDays(30));
    //
   }
}

Пожалуйста, обратитесь по этой ссылке https://medium.com/techcompose/create-rest-api-in-laravel-with-authentication-using-passport-133a1678a876

0 голосов
/ 30 мая 2018

Вы передали токен API в заголовке.Если нет, сначала вы должны передать данные для входа в api и получить токен api.Затем передайте этот токен на запрос, который вы пытаетесь получить.Другая возможность - вам нужно снова запустить команду установки Passport, если ваша среда изменится с локальной на живую

...