2017-02-09 13 views
0

Я разрабатываю Laravel API и пользовательский интерфейс angularjs, проблема при перенаправлении Microsoft знака страницы получать вопрос Корса для Microsoft Graph, вопроспри перенаправлении Microsoft знака страницы получать вопрос Корса для Microsoft Graph

XMLHttpRequest не может загрузить https://reservations-api.nymblpro.com/coordinator/event. Перенаправление от 'https://reservations-api.nymblpro.com/coordinator/event' в 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?state=cuSlE1 ... rect_uri = HTTPS% 3A% 2F% 2Freservations-api.nymblpro.com% 2Fcoordinator% 2Fevent' заблокирован политикой CORS: Запрос требует предполетной, который запрещено следовать крестик -оригина перенаправлять.

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

public function get_microsoft_token(Request $request) 
{ 
    $provider = new \League\OAuth2\Client\Provider\GenericProvider([ 
     'clientId'    => 'fd482697-fd9f-46ac-ab3a-727e47517c8b', 
     'clientSecret'   => 'WZOh3qLz7ZQyKemCQf3RsCF', 
     'redirectUri'    => 'https://reservations-api.nymblpro.com/coordinator/event', 
     'urlAuthorize'   => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize', 
     'urlAccessToken'   => 'https://login.microsoftonline.com/common/oauth2/v2.0/token', 
     'urlResourceOwnerDetails' => '', 
     'scopes'     => 'openid calendars.readwrite' 
    ]); 
    if (!$request->has('code')) { 
     return redirect($provider->getAuthorizationUrl()); 
    } 
    else { 
     $accessToken = $provider->getAccessToken('authorization_code', [ 
      'code' => $request->input('code') 
     ]); 
     return ($accessToken->getToken()); 
    } 
} 
+0

http://stackoverflow.com/questions/40388152/microsoft-graph-download-file-content-returns-404/40400293#40400293 и http://stackoverflow.com/questions/34949492/cors-request-with -reflight-and-redirect-disallowed-workarounds/39728229 # 39728229 могут быть релевантными – sideshowbarker

+0

Было бы полезно, если бы вы также разместили соответствующую часть вашего JavaScript-кода вашего клиента, отправляющего запрос. – sideshowbarker

+0

@sideshowbarker - это JavaScript '$ scope.getTokenForCalender = function() { var url = "https://reservation-api.dev/coordinator/event"; mainHTTPService.getData (url, globalService.getReqHeader()) .then (функция (результат) { console.log («Токен для интеграции с календарем») + JSON.stringify (результат)) }, function (err) { console.log (JSON.stringify (err)); alert ("Error Occared ...."); }); } $ scope.getTokenForCalender(); здесь ошибка равна нулю –

ответ

0

Похоже, что ваше приложение AngularJs будет вызывать API вашего приложения Laravel, которая возвращает URL авторизации, то ваш angularJs интерфейс будет вызывать этот адрес в функции AJAX. Так что это должно быть преступником.

Вы можете попытаться изменить код в ваших angularjs передний конец приложения, изменить что-то вроде $http.get() функции на что-то вроде:

// similar behavior as an HTTP redirect 
window.location.replace("http://stackoverflow.com"); 

// similar behavior as clicking on a link 
window.location.href = "http://stackoverflow.com"; 

В противном случае, вы можете попробовать использовать Адал для JS в вашем angularjs приложении. Обратитесь к https://github.com/AzureAD/azure-activedirectory-library-for-js за дополнительной информацией.

+0

Я смог обойти эту проблему, перенаправляя непосредственно на страницу авторизации авторизации, спасибо @garry liu и sidesshowbarker –