如何解决访问Laravel路由时的CORS错误

时间:2020-06-22 08:30:53

标签: php laravel outlook cors outlook-addin

我对laravel应用程序非常陌生。我试图做的是开发一个使用laravel编写的API的Outlook Web插件。问题是,它通过Outlook邮件访问API时会产生CORS错误。

错误:

Access to XMLHttpRequest at 'https://test.com/api/test' from origin 'https://localhost:44377' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

到目前为止,我已经尝试过:

  • spatia / laravel-cors模块已安装并尝试
  • 在bootstrap / app.php中添加了此内容:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
  • 创建了CORS类文件并添加为中间件

最后出现相同的错误。我该怎么办?

编辑:

为什么它会自动将请求重定向到https而不是http。哪里出错了?请求网址应为http://test.com/api/test,而不是https://test.com/api/test

提前谢谢!

5 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,通过Middleware

解决了

Define your custom middleware

//App\Http\Middleware;

public function handle($request, Closure $next)
{
    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', '*')
        ->header('Access-Control-Allow-Credentials', true)
        ->header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,X-Token-Auth,Authorization')
        ->header('Accept', 'application/json');
}

不仅要注册您的中间件,还可以是本地(针对特定的路由)或全局的中间件。

How to register Middleware

注意!一些旧的浏览器不支持“ *”逻辑

答案 1 :(得分:0)

如果您使用的是Laravel 7.0,则已经内置了CORS功能

答案 2 :(得分:0)

您需要检查是否正在开发Outlook插件:

  • 检查您是否已在manifest.xml中包含域名,在我的情况下,我需要包含https://test.com才能包含在标签中。
  • 您的域应具有ssl证书。(例如)Outlook允许您仅通过https进行请求。

并遵循以下答案:middleware to solve cors

答案 3 :(得分:0)

在您的 Laravel 应用中尝试这种方式:

php artisan serve --host YOUR_LOCAL_IP

YOUR_LOCAL_IP 是你的ip,linux下可以用ifconfig命令访问,windows下用ipconfig命令访问。

最后你应该请求YOUR_LOCAL_IP:PORT/api

答案 4 :(得分:0)

我使用的是 Laravel 8

检查配置/cors.php

将路径数组更改为 * ('paths' => ['*'])