2016-02-17 2 views
1

Я пытаюсь настроить CORS в своем приложении «Угловая клиентская» и серверное приложение Laravel для его отладки. Я делал это раньше без проблем, но по посторонней причине это сейчас не работает, и я не знаю, почему.Почему мое приложение CORS не распознает мою сессию?

Я пробовал использовать laravel-cors, и теперь я пытаюсь создать собственное промежуточное программное обеспечение в Laravel, так или иначе, результат будет таким же.

Я могу отправить заявки CORS на сервер, и я могу войти в систему. Но как только я там, сервер не может обнаружить, что я уже вошел в систему.

Я уже установил следующее в своем угловом приложении. (На самом деле я никогда не делал этого с другими приложениями, но читал, что мне может понадобиться следующее).

app.config(function ($httpProvider) { 
    $httpProvider.defaults.withCredentials = true; 
    $httpProvider.defaults.useXDomain = true; 
}); 

Но я получаю 302 ответа (перенаправлять) от Laravel к опциям запрос, отправленный угловыми приложение. Это означает, что я не зашел в приложение (что я и сделал).

Изображение объясняет это лучше, вот не удалось аутентификации с CORS: Failed CORS

А вот работает аутентификация с CORS (я думаю, что я сделал в основном то же самое в обоих, но один работает и а другой нет): Working CORS

Я должен добавить, что это не проблема сеанса, так как это работает без CORS (на веб-просмотре).

ответ

0

После эона, пытающегося заставить его работать, я узнал, что мое приложение не смогло обработать сеанс в предполетном режиме, поэтому я отправил пустой ответ на запрос OPTIONS с соответствующими заголовками.

Я ПОЧТАЮ ПОМОЧНУЮ ПОМОЩЬ CORS здесь, вы можете использовать его, как это делается для общественного домена под CC0.

<?php 

// Under Public Domain Dedication <https://creativecommons.org/publicdomain/zero/1.0/> 
// With help of the following article: http://en.vedovelli.com.br/2015/web-development/Laravel-5-1-enable-CORS/ 

namespace App\Http\Middleware; 

use Closure; 

class Cors 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $VALID_ORIGINS = ['*']; 

     foreach($VALID_ORIGINS as $valid_origin){ 
      if($_SERVER['HTTP_ORIGIN']===$valid_origin||$valid_origin==='*'){ 
       if($request->method()=='OPTIONS'){ 
        return response()->make() 
         ->header('Access-Control-Allow-Origin', $_SERVER['HTTP_ORIGIN']) 
         ->header('Access-Control-Allow-Headers', 'Accept, Content-Type') 
         ->header('Access-Control-Allow-Credentials', 'true'); 
       }else{ 
        return $next($request) 
         ->header('Access-Control-Allow-Origin', $_SERVER['HTTP_ORIGIN']) 
         ->header('Access-Control-Allow-Credentials', 'true'); 
       } 
      } 
     } 
    } 
} 
Смежные вопросы