Ionic 3 - Laravel - Не отправлять обратно клиенту заголовки, которые позволяют CORS - PullRequest
0 голосов
/ 25 мая 2018

У меня есть система с Ionic 3 для разработки адаптивного веб-приложения и Laravel как Rest API.На локальном сервере он работает отлично, но когда я пошел на развертывание приложений, он выдал ошибку CORS.

enter image description here

Я уже определил прокси [{"path", "proxyUrl"}] в ionic.config.json.Есть ли какие-либо другие изменения, которые мне нужно внести, чтобы запустить систему в работу?

Я работаю на сервере Apache.

Запрос на вход в систему:

login() {
this.http.post<any>('http://www.example.com/api/login', this.user)
  .subscribe(data => {...})};

Мой перехватчик Http:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  let authRequest = req;
  const token = this.session.tokenGetter();
  if (token) {
    authRequest = req.clone({
      setHeaders: {
        'Access-Control-Allow-Origin': '*',
        'Authorization': `Bearer ${token}`
      }
    })
  }
  return next.handle(authRequest);
}

Маршруты в Laravel:

Route::post('login', function (Request $request) {
  $data = $request->only('email', 'password');
  $token = \Auth::guard('api')->attempt($data);
  if (!$token) {
    return response()->json([
      'error' => 'Credentials invalid'
    ], 400);
  }
  return ['token' => $token];
});

CORS в Laravel:

<?php
namespace App\Http\Middleware;
use Closure;
class CorsMiddleware
{
    public function handle($request, Closure $next)
    {
        if($request->is('api/*')){ //api/products /api/login
            header('Access-Control-Allow-Origin: *');
            header('Access-Control-Allow-Headers: Content-Type, Authorization');
        }
        return $next($request);
    }
}

1 Ответ

0 голосов
/ 25 мая 2018

Это означает, что ваш сервер не отправляет обратно клиенту заголовки, которые разрешают CORS:

1.Access-Control-Allow-Origin 2.Access-Control-Allow-Methods

Создайте новое промежуточное ПО:

php artisan make:middleware Cors

в Cors.php

<?php // /app/Http/Middleware/Cors.php
namespace App\Http\Middleware;
use Closure;
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');
    }
}

в Kernel.php

<?php // /app/Http/Kernel.php
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'cors' => \App\Http\Middleware\Cors::class, // <<< add this line
];

в routes.php

<?php
Route::get('', ['middleware' => 'cors', function() {
    return 'You did it!';
}]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...