попробуйте сделать маршрут publi c, когда у него есть промежуточное ПО аутентификации - PullRequest
0 голосов
/ 23 марта 2020

привет, у меня возникла проблема с доступом к нескольким маршрутам, когда они были ограничены от middlewere

мой маршрут выглядит так

Route::group([
    'middleware' => ['api','auth:sanctum'],
], function ($router) {
    Route::prefix('users')->group(function ($usersRoute) {
        Route::post('login', 'Api\Users\UserController@login');
        Route::post('logout', 'Api\Users\UserController@logout');
        Route::post('refresh', 'Api\Users\UserController@refresh');
        Route::post('profile', 'Api\Users\UserController@profile');
    });
    Route::prefix('leads')->group(function ($leadRoute) {
//        Route::get('look' , 'Api\Leads\LeadController@index');
//        Route::get('look/{id}' , 'Api\Leads\LeadController@find');
//        Route::post('look' , 'Api\Leads\LeadController@create');
//        Route::put('look/{id}' , 'Api\Leads\LeadController@update');
//        Route::delete('look/{id}' , 'Api\Leads\LeadController@archived');
//        Route::put('look/{id}/view' , 'Api\Leads\LeadController@toggleView');
        Route::prefix('assets')->group(function ($leadRoute) {
            Route::get('/' , 'Api\Leads\AssetController@index');
            Route::post('/' , 'Api\Leads\AssetController@create');
            Route::get('/show/random' , 'Api\Leads\AssetController@showRandomAsset');
            Route::delete('/{id}' , 'Api\Leads\AssetController@archived');
            Route::delete('/autoclear' , 'Api\Leads\AssetController@autoClear');
            Route::put('/{id}/show' , 'Api\Leads\AssetController@toggleShow');
        });
    });
});

теперь у меня есть два контроллера, которые подрядчик выглядит так

class UserController extends BaseAPIController
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:sanctum', ['except' => ['login']]);
    }

когда я проверяю список маршрутов

api,auth:sanctum                                     |
|        | POST     | api/users/login                        |                       | App\Http\Controllers\Api\Users\UserController@login            | api,auth:sanctum                                     |
|        | POST     | api/users/logout                       |                       | App\Http\Controllers\Api\Users\UserController@logout           | api,auth:sanctum                                     |
|        | POST     | api/users/profile                      |                       | App\Http\Controllers\Api\Users\UserController@profile          | api,auth:sanctum                                     |
|        | POST     | api/users/refresh                      |                       | App\Http\Controllers\Api\Users\UserController@refresh          | api,auth:sanctum                

, что я пробую, это бесплатный вход в систему для всех, но я получаю

{"message": "Не аутентифицирован. " } Я вроде потерял, пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Из вашего кода вы включаете промежуточное ПО дважды, и это неправильно.

Вы должны удалить промежуточное ПО группы в файле маршрутов, поскольку вы уже внедряете промежуточное ПО аутентификации в метод конструктора.

Удалить

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

После этого ваш код должен работать так, как задумано, поскольку промежуточное программное обеспечение auth: sanctum будет вызываться только один раз в вашем контроллере каждый раз, когда оно создается, и исключает маршрут входа.

0 голосов
/ 23 марта 2020

, когда я проверял do c из laravel, я обнаружил, что:

$ this-> middleware («подписано») -> кроме («store»);

второй параметр для функции middleware использует для опций, так как насчет try:

$ this-> middleware ('auth: sanctum') -> кроме ('login ');

...