У меня есть интернет магазин написанный на 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');