php artisan install:api
Я обновил модель пользователя до следующее:
Код: Выделить всё
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
.....
Код: Выделить всё
return [
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
];
используйте Laravel\Sanctum\Sanctum;
Код: Выделить всё
return [
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),
'guard' => ['web'],
'expiration' => null,
'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),
'middleware' => [
'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
],
];
Код: Выделить всё
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\CourseController;
use App\Http\Controllers\Api\AuthController;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Route::get('courses', [CourseController::class, 'list']);//->middleware('auth:sanctum');
Route::post('login', [AuthController::class, 'login']);
Route::post('logout', [AuthController::class, 'logout']);
Route::post('register', [AuthController::class, 'register']);
Код: Выделить всё
public function login(Request $request)
{
try {
$credentials = $request->only('email', 'password');
if(!Auth::attempt($credentials)) {
return response()->json([
'status' => false,
'message' => "Credentials don't match.",
], 401);
}
$user = User::where('email', $request->email)->first();
return response()->json([
'status' => true,
'message' => 'user logged in successfully',
'token' => $user->createToken("API TOKEN")->plainTextToken
], 200);
} catch(\Exception $e) {
return response()->json([
'status' => false,
'message' => $e->getMessage(),
]);
}
}
Как моя страница входа в React выдает ошибку 419 при попытке войти в систему:< /p>
Страница реагирования выглядит следующим образом:
Код: Выделить всё
import React, { useState } from 'react';
// import { useAuth } from '../AuthContext';
import { login } from '../authService';
import axios from 'axios'
const Login = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
// const { setUser } = useAuth();
const handleSubmit = async (e) => {
e.preventDefault();
try {
// const user = await login(email, password);
// setUser(user);
const user = await axios.post('http://localhost:8000/api/login', {
email: email,
password: password
});
} catch (error) {
console.error('Login failed', error);
}
};
return (
Login
Email
setEmail(e.target.value)}
required
className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"
/>
Password
setPassword(e.target.value)}
required
className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"
/>
Login
);
};
export default Login;
Сайт React находится по адресу http://localhost:3000, который теоретически был очищен конфигурация Sanctum.
Как я могу разрешить моему приложению React аутентифицироваться и гарантировать, что я могу отправлять запросы к другим конечным точкам, защищенным промежуточным программным обеспечением Sanctum?
Я покопался довольно много, и найденные на данный момент ответы кажутся устаревшими

Подробнее здесь: https://stackoverflow.com/questions/786 ... 400-errors