Я работаю над приложением, в котором внешний интерфейс построен на React, а Laravel используется на внутреннем. У меня возникают проблемы с CORS, когда я звоню на сервер ajax. Я уже создал промежуточное ПО CORS.php
и добавил заголовки, чтобы разрешить вызовы из разных источников, и это работает для других запросов, но не для регистрации или входа в систему. Выдает ошибку Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
.
CORS. php код
class CORS
{
public function handle($request, Closure $next)
{
return $next($request)->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
}
При регистрации с внешнего интерфейса
onSignUp = () => {
const inputs = Array.from(this.inputRefs.values());
const isAllValid = validateFields(inputs);
if (isAllValid) {
this.setState(
{
isSigningUp: true,
},
() => {
const signUpBody = this.state;
axios
.post(Urls.register, signUpBody)
.then(response => {
if (response.status === HttpsStatus.OK) {
this.userPortal.onSuccess(response.data);
}
})
.catch((err) => {
console.log("ERROR", err)
// this.inputRefs.get('email').showErrorMessage('This email already exists');
this.setState({
isSigningUp: false,
});
});
},
);
}
};
Регистрация контроллера Backend
public function Register(Request $request)
{
$this->validate($request, [
"photo" => "nullable",
"name" => "required|min:3|max:15",
"email" => "required|email|unique:users,email",
"password" => "required|min:6|max:50",
"phone" => "required|digits:11",
"address" => "required|min:6|max:50"
]);
\DB::beginTransaction();
$user = new User();
return response($request, 200);
$user->fill($request->all());
$user->password=Hash::make($request->password);
if ($request->photo) {
$photo = $request->photo;
$png_url = "/img/" . time() . ".png";
$path = public_path() . "/storage" . $png_url;
$data = explode(',', $photo)[1];
$data = base64_decode($data);
Image::make($data)->resize(500, 500)->save($path);
$user->photo = $png_url;
}
if ($user->save()) {
\DB::commit();
return response(new UserResource($user), 200);
}
\DB::rollBack();
return response('Something went wrong', 504);
}
Внутренние маршруты с промежуточным ПО CORS
Route::group(['middleware' => 'cors'], function () {
Route::resource('/food', 'FoodController')->except(["create", "edit"]);
Route::resource('/category', 'FoodCategoryController')->except(["create", "edit"]);
Route::resource('/order', "OrderController");
Route::post('/login', 'UserController@Login');
Route::post('/register', 'UserController@Register');
Route::get('/user/{user}', 'UserController@getUser');
Route::post('/food/comment', 'FoodController@createComment');
Route::put('/food/comment', 'FoodController@updateComment');
Route::delete('/food/comment/{comment}', 'FoodController@deleteComment');
});