Ограничение политики CORS Laravel применение - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над приложением, в котором внешний интерфейс построен на 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');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...