@Rab1d

Как дать доступ к роутам web.php по токену JWT в Laravel?

У меня есть интернет магазин написанный на Laravel+Vue и использую JWT токены. Суть в чём, у меня есть админка которая находится по роуту market/admin и проблема в том, что в него может зайти каждый если введёт ссылку. У меня в Users модели есть поле "is_admin", которое проверяет администратор пользователь или нет. Если да, то я даю кнопку с ссылкой на админку, но сам роут как-то защитить нужно. Я решил добавить в web.php где все мои роуты админки midlleware. Теперь вход не работает, так как пишет "Route [login] not defined.". В api запросе я отдаю как раз таки свой токен и принимаю в методе me(), но видимо что-то не хватает в web.php чтобы дать доступ в админку. Подскажите что можно сделать...
Метод axios:
goAdmin(){
this.axios.get('/api/auth/me', null, {
  headers: {
       'authorization': `Bearer ${localStorage.getItem('access_token')}`,
        'Accept': 'application/json'
          },
          'Accept': 'application/json'})
           .then(res => {
              console.log(res);
               // window.location.href = '/admin'
            })

AuthController.php:
public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login', 'refresh', 'register']]);
    }
    /**
     * Get a JWT via given credentials.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function register(StoreRequest $request){
        $data = $request->validated();
        $data['password'] = Hash::make($data['password']);
        $user = User::where('address', $data['address'])->first();
        if ($user) return response(['message' => 'Пользователь с такой почтой уже существует!'], 403);
        $user = User::create($data);
        $token = auth()->tokenById($user->id);

        return response([
            'status' => true,
            'access_token' => $token
        ]);
    }

    public function login()
    {
        $credentials = request(['login', 'password']);
        if (! $token = auth()->attempt($credentials)) {
            return response()->json(['error' => 'Неправильный логин или пароль!'], 401);
        }
        return $this->respondWithToken($token);
    }
    /**
     * Get the authenticated User.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json(auth()->user());
    }

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

Route::post('/orders', \App\Http\Controllers\API\Order\StoreController::class);
Route::post('/products', \App\Http\Controllers\API\Product\IndexController::class);
Route::get('/products/filters', \App\Http\Controllers\API\Product\FilterListController::class);
Route::get('/products/{product}', \App\Http\Controllers\API\Product\ShowController::class);

Route::group(['middleware' => 'api', 'prefix' => 'auth'], function($router) {
    Route::post('me', [App\Http\Controllers\API\Auth\AuthController::class, 'me']);
    Route::post('register', [App\Http\Controllers\API\Auth\AuthController::class, 'register']);
    Route::post('login', [App\Http\Controllers\API\Auth\AuthController::class, 'login']);
    Route::post('refresh', [App\Http\Controllers\API\Auth\AuthController::class, 'refresh']);
    Route::post('logout', [App\Http\Controllers\API\Auth\AuthController::class, 'logout']);
});

web.php(тут несколько роутов, но их там больше):
Route::group(['prefix' => 'admin', 'middleware' => ['admin', 'auth:sanctum']], function(){
Route::get('/', \App\Http\Controllers\Main\indexController::class)->name('main.index');

Route::group(['prefix' => 'categories'], function () {
    Route::get('/', IndexController::class)->name('category.index');
    Route::get('/create', CreateController::class)->name('category.create');
    Route::post('/', StoreController::class)->name('category.store');
    Route::get('/{category}/edit', EditController::class)->name('category.edit');
    Route::get('/{category}', ShowController::class)->name('category.show');
    Route::patch('/{category}', UpdateController::class)->name('category.update');
    Route::delete('/{category}', DeleteController::class)->name('category.delete');
});
;
})->middleware('auth');
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы