Laravel API 和 Ionic 2 客户端:CORS 没有“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】Laravel API 和 Ionic 2 客户端:CORS 没有“Access-Control-Allow-Origin”标头【英文标题】:Laravel API and Ionic 2 Client: CORS No 'Access-Control-Allow-Origin' header 【发布时间】:2018-02-07 12:48:40 【问题描述】:

我使用 Laravel 创建了一个 API,并尝试将它与 Ionic 2 项目一起使用

我正在尝试向我的 Laravel API 发出 GET 请求。

当我提出http 请求时

auth/prodiver/callback/userID/accessToken

我收到了这个错误:

Failed to load http://api.url.net/api/auth/facebook/callback/XXXX/MY_TOKEN: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8001' is therefore not allowed access.

我的路线是这样的:

Route::group(['middleware' => ['guest', 'cors']], function() 
    Route::get('test', function () 
        return response()->json('dummy.data', 200);
    );

    Route::get('auth/prodiver/callback/userID/accessToken', 'SocialAuthController@callback')->middleware('cors')->name('social.auth'); // social auth
);

但是当我尝试使用路由test 的相同代码时,它可以工作并且我得到了数据...

“facebook connect”不是问题,触发了成功回调。

这里是callback() 方法

public function callback($provider, $userID, $accessToken)

    if ($provider == "facebook")
        $user = $this->createOrGetUser($userID, $accessToken);
        auth()->login($user);
        return response()->json($user, 200);
    

所有其他 http 请求都可以正常工作...

这里是关注的http 请求(在 Ionic 项目中)

let headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 
let url = this.baseApiUrl+'auth/facebook/callback/' + userID + '/' + accessToken; 
this.http
    .get(url, headers: headers)
    .map(res => res.json())
    .subscribe(data => 
            console.log(data)
        , err => 
            this.onError(err);
        
    );

我不明白发生了什么,有人有线索吗?我完全厌倦了这个错误:/

非常感谢! :)

【问题讨论】:

您提到了cors 中间件。你用什么包,barryvdh/laravel-cors?你配置好了吗? 是的,我让配置到处都是“*”,用于开发... No 'Access-Control-Allow-Origin' header - Laravel 5.4的可能重复 你可以试试浏览器插件跨域资源共享(CORS)。我也面临这个问题 ionic + laravel 5.2。这对我有用。 是的,我可以通过一个CORS浏览器插件,但这不是有点愚蠢吗?这是一个 Ionic 应用程序,我不能要求用户安装它... 【参考方案1】:

首先,为什么在定义第二条路由的时候要设置cors中间件呢?已经为整个组设置好了。

其次,cors 返回一个 cors 错误,以防您的代码出现错误,这就是它的行为。

发生错误时,中间件未完全运行。所以当 发生这种情况,您不会看到实际结果,但会得到一个 CORS 而是错误。

尝试调试您的代码以查找错误。测试返回数据,说明这不是报错的cors,是你的代码。

【讨论】:

您好,感谢您的回答。我将 CORS 中间件放在路由和组上,只是为了尝试,以确保中间件是“活动的”......我会检查我的代码以找到错误,谢谢 :) 您对中间件的看法是正确的!我的脚本中有一个错误......但是我现在遇到了“预检请求”的另一个问题......:/

以上是关于Laravel API 和 Ionic 2 客户端:CORS 没有“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

在 API 端使用 Ionic 和 laravel 进行实时聊天

Ionic 3 - Laravel - 不向客户端发送允许 CORS 的标头

Laravel 5 CORS 问题与 Ionic Angular

Ionic 2:点击推送通知

Laravel 未检测到标头和 JWT 包中发送的身份验证令牌

我可以在同一个数据库中使用 Laravel 和 Ionic 吗?