2017-02-09 72 views
0

我开发laravel API和UI是angularjs,问题是在页面获取CORS问题重定向到微软标志的微软图形时,这个问题是页面获取CORS问题重定向时微软标志的微软图形

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 -preflight-and-redirect-disallowed-workarounds/39728229#39728229可能与此有关 – sideshowbarker

+0

如果您还发布了发送请求的客户端JavaScript代码的相关部分,这将会很有帮助。 – sideshowbarker

+0

@sideshowbarker这里是JavaScript'$ scope.getTokenForCalender = function() { var url =“https://reservation-api.dev/coordinator/event”; (函数(结果){ console.log(“Token For Calender Integration - ”+ JSON.stringify(result)); },function(err) console.log(JSON.stringify(err)); alert(“Error Occured ....”); }); } $ scope.getTokenForCalender(); 这里err为空 –

回答

0

它看起来像你的AngularJs应用程序将调用您的Laravel应用程序的API,它返回授权的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 –