Laravel API 请求 - “未经授权”

时间:2021-04-23 10:01:32

标签: laravel

大家好,

今天我决定验证我的实验 api。我安装了 Passport,但一直收到响应:

{
   error: {
     message: "Unauthorized"
   }
}

我尝试禁用它,然后在 api.php 中使用:

Route::get('test', function (){
    return 1;
});

作为一个测试点,但我仍然收到相同的消息,所以我认为它与 Passport 包无关。

Kernel.php

<?php

namespace App\Http;

use App\Http\Middleware\Authenticate;
use App\Http\Middleware\Cors;
use App\Http\Middleware\CrossDomain;
use App\Http\Middleware\EncryptCookies;
use App\Http\Middleware\ForceJsonResponse;
use App\Http\Middleware\isAdmin;
use App\Http\Middleware\isCompany;
use App\Http\Middleware\RedirectIfAuthenticated;
use App\Http\Middleware\TrimStrings;
use App\Http\Middleware\TrustProxies;
use App\Http\Middleware\VerifyCsrfToken;
use Cog\Laravel\Ban\Http\Middleware\ForbidBannedUser;
use Cog\Laravel\Ban\Http\Middleware\LogsOutBannedUser;
use Fruitcake\Cors\HandleCors;
use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth;
use Illuminate\Auth\Middleware\Authorize;
use Illuminate\Auth\Middleware\EnsureEmailIsVerified;
use Illuminate\Auth\Middleware\RequirePassword;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;
use Illuminate\Foundation\Http\Middleware\ValidatePostSize;
use Illuminate\Http\Middleware\SetCacheHeaders;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Routing\Middleware\ThrottleRequests;
use Illuminate\Routing\Middleware\ValidateSignature;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use RenatoMarinho\LaravelPageSpeed\Middleware\ElideAttributes;
use RenatoMarinho\LaravelPageSpeed\Middleware\InlineCss;
use RenatoMarinho\LaravelPageSpeed\Middleware\InsertDNSPrefetch;
use RenatoMarinho\LaravelPageSpeed\Middleware\RemoveComments;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        TrustProxies::class,
        HandleCors::class,
        PreventRequestsDuringMaintenance::class,
        ValidatePostSize::class,
        TrimStrings::class,
        ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            EncryptCookies::class,
            AddQueuedCookiesToResponse::class,
            StartSession::class,
            ShareErrorsFromSession::class,
            VerifyCsrfToken::class,
            SubstituteBindings::class,
            CrossDomain::class,

            InlineCss::class,
            ElideAttributes::class,
            InsertDNSPrefetch::class,
            RemoveComments::class,
            //CollapseWhitespace::class,
            //DeferJavascript::class,
        ],

        'api' => [
            //'throttle:api',
            SubstituteBindings::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => Authenticate::class,
        'auth.basic' => AuthenticateWithBasicAuth::class,
        'cache.headers' => SetCacheHeaders::class,
        'can' => Authorize::class,
        'guest' => RedirectIfAuthenticated::class,
        'password.confirm' => RequirePassword::class,
        'signed' => ValidateSignature::class,
        'throttle' => ThrottleRequests::class,
        'verified' => EnsureEmailIsVerified::class,
        'forbid-banned-user' => ForbidBannedUser::class,
        'logs-out-banned-user' => LogsOutBannedUser::class,
        'is_admin' => isAdmin::class,
        'is_company' => isCompany::class,
        'json.response' => ForceJsonResponse::class,
        'cors' => Cors::class,
    ];
}

config/auth.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

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

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

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | times out and the user is prompted to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => 10800,

];

routes/api.php

<?php

use Illuminate\Support\Facades\Route;

Route::get('test', function () {
    return 1;
});

Route::group(['middleware' => ['cors', 'json.response']], function () {
    Route::group(['prefix' => 'auth'], function () {
        Route::post('login', 'Api\AuthController@login');

        Route::group(['middleware' => 'auth:api'], function () {
            Route::get('logout', 'Api\AuthController@logout');
            Route::get('user', 'Api\AuthController@user');
        });
    });

    Route::group(['middleware' => 'auth:api'], function () {
        // Companies
        Route::group(['prefix' => 'provider/company'], function () {
            Route::post('store', 'Api\Provider\CompanyController@store');
            Route::get('show/{id}', 'Api\Provider\CompanyController@show');
            Route::patch('update', 'Api\Provider\CompanyController@update');
            Route::delete('destroy/{id}', 'Api\Provider\CompanyController@destroy');
            Route::get('branches/{id}', 'Api\Provider\CompanyController@branches');
        });

        // Branches
        Route::group(['prefix' => 'provider/branch'], function () {
            Route::post('store', 'Api\Provider\BranchController@store');
            Route::get('show/{id}', 'Api\Provider\BranchController@show');
            Route::patch('update', 'Api\Provider\BranchController@update');
            Route::delete('destroy/{id}', 'Api\Provider\BranchController@destroy');
            Route::get('classifieds/{id}', 'Api\Provider\BranchController@classifieds');
        });

        // Classifieds
        Route::group(['prefix' => 'provider/classified'], function () {
            Route::post('store', 'Api\Provider\ClassifiedController@store');
            Route::get('show/{identifier}', 'Api\Provider\ClassifiedController@show');
            Route::patch('update', 'Api\Provider\ClassifiedController@update');
            Route::delete('destroy/{identifier}', 'Api\Provider\ClassifiedController@destroy');
        });

        // Attributes
        Route::group(['prefix' => 'provider/data'], function () {
            Route::get('categories', 'Api\Provider\DataController@categories');
            Route::get('attributes/{parent_id}', 'Api\Provider\DataController@attributes');
        });
    });

});

错误堆栈:

{
message: "Too Many Attempts.",
exception: "Illuminate\Http\Exceptions\ThrottleRequestsException",
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php",
line: 200,
trace: [
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php",
line: 121,
function: "buildException",
class: "Illuminate\Routing\Middleware\ThrottleRequests",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php",
line: 63,
function: "handleRequest",
class: "Illuminate\Routing\Middleware\ThrottleRequests",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "Illuminate\Routing\Middleware\ThrottleRequests",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 103,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Routing\Router.php",
line: 697,
function: "then",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Routing\Router.php",
line: 672,
function: "runRouteWithinStack",
class: "Illuminate\Routing\Router",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Routing\Router.php",
line: 636,
function: "runRoute",
class: "Illuminate\Routing\Router",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Routing\Router.php",
line: 625,
function: "dispatchToRoute",
class: "Illuminate\Routing\Router",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php",
line: 166,
function: "dispatch",
class: "Illuminate\Routing\Router",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 128,
function: "Illuminate\Foundation\Http\{closure}",
class: "Illuminate\Foundation\Http\Kernel",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\app\Http\Middleware\ForceJsonResponse.php",
line: 20,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "App\Http\Middleware\ForceJsonResponse",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\renatomarinho\laravel-page-speed\src\Middleware\PageSpeed.php",
line: 28,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "RenatoMarinho\LaravelPageSpeed\Middleware\PageSpeed",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\renatomarinho\laravel-page-speed\src\Middleware\PageSpeed.php",
line: 28,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "RenatoMarinho\LaravelPageSpeed\Middleware\PageSpeed",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\renatomarinho\laravel-page-speed\src\Middleware\PageSpeed.php",
line: 28,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "RenatoMarinho\LaravelPageSpeed\Middleware\PageSpeed",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\renatomarinho\laravel-page-speed\src\Middleware\PageSpeed.php",
line: 28,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "RenatoMarinho\LaravelPageSpeed\Middleware\PageSpeed",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\renatomarinho\laravel-page-speed\src\Middleware\PageSpeed.php",
line: 28,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "RenatoMarinho\LaravelPageSpeed\Middleware\PageSpeed",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\renatomarinho\laravel-page-speed\src\Middleware\PageSpeed.php",
line: 28,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "RenatoMarinho\LaravelPageSpeed\Middleware\PageSpeed",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\fruitcake\laravel-cors\src\HandleCors.php",
line: 57,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "Fruitcake\Cors\HandleCors",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php",
line: 21,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull.php",
line: 31,
function: "handle",
class: "Illuminate\Foundation\Http\Middleware\TransformsRequest",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php",
line: 21,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TrimStrings.php",
line: 40,
function: "handle",
class: "Illuminate\Foundation\Http\Middleware\TransformsRequest",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "Illuminate\Foundation\Http\Middleware\TrimStrings",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php",
line: 27,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "Illuminate\Foundation\Http\Middleware\ValidatePostSize",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance.php",
line: 86,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\fideloper\proxy\src\TrustProxies.php",
line: 57,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 167,
function: "handle",
class: "Fideloper\Proxy\TrustProxies",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php",
line: 103,
function: "Illuminate\Pipeline\{closure}",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php",
line: 141,
function: "then",
class: "Illuminate\Pipeline\Pipeline",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php",
line: 110,
function: "sendRequestThroughRouter",
class: "Illuminate\Foundation\Http\Kernel",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\public\index.php",
line: 55,
function: "handle",
class: "Illuminate\Foundation\Http\Kernel",
type: "->"
},
{
file: "C:\Users\lopes\PhpstormProjects\Ocasiao-CMS\server.php",
line: 21,
function: "require_once"
}
]
}

你们中的任何人能给我一个关于如何解决这个问题的提示或解释/

2 个答案:

答案 0 :(得分:1)

如果您删除了 Auth 中间件,但仍然未经授权,则意味着可能存在路由缓存。尝试使用 php artisan route:clear 并检查。

答案 1 :(得分:0)

我刚刚意识到安装的另一个包与这个包冲突。

谢谢大家!