в файле api/routes.php пишу:
Route::middleware('auth:sanctum')
->post('/api/v1/token', [\App\Http\Controllers\Api\v1\Auth::class, 'token'])
->name('token');
И у меня есть контроллер:
<?php
namespace App\Http\Controllers\Api\v1;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Validation\ValidationException;
class Auth extends Controller
{
function token(\Request $request) {
$data = $request->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => 'required',
]);
/** @var User $user */
$user = User::query()->firstWhere('email', $data['email']);
if (!$user || !\Hash::check($data['password'], $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
return $user->createToken($data['device_name'])->plainTextToken;
}
}
Но POST запрос к /api/v1/token возвращает 404. Почему так? Все как в доках вроде...
потому что ты не аутентифицирован через санктум
убери /api на второй строке
точно
404 это не про санктум а про ненайденный роут. php artisan route:list и посмотрите зарегестрирован роут вообще или нет. и если да то по какому маршруту. скорее всего у вас там api/api/блаблабла
Зачем? Я хочу чтобы такая ссылка была.
поскольку вы пишете в routes/api.php, то все роуты что есть в этом файле идут с префиксом /api по дефолту. поэтому в вашем роуте надо убрать /api чтобы роут был доступен по /api/mycontroller. а сейчас у вас настроено на /api/api/mycontroller
О, кажется прокатило. Теперь 500 выдает. Буду разбираться, спасибо. А что вообще за middleware auth:sanctum?
https://laravel.com/docs/8.x/sanctum#introduction
То есть маршрут доступен только авторизированным?
Обсуждают сегодня