我们有一台服务器,其域为test.de
,并且两个应用程序A
和B
在同一服务器上但在子域上运行:
a.test.de
b.test.de
A
向GET
的API发送一个B
请求,但是即使没有请求,它总是发送不带Cookie的请求。
由于端点受到保护,我们总是会收回401 Unauthorized
。对B
上不受保护的端点的请求不会引起任何问题,因为它们不需要cookie。
withCredentials: true
根据请求withCredentials
在axios默认值上设置为true laravel-cors
软件包配置为尽可能宽松<?php
return [
'supportsCredentials' => true,
'allowedOrigins' => ['*'],
'allowedOriginsPatterns' => [],
'allowedHeaders' => ['*'],
'allowedMethods' => ['*'],
'exposedHeaders' => [],
'maxAge' => 0,
];
same_site
中的config/session.php
设置为null
SESSION_DOMAIN
都设置为.test.de
答案 0 :(得分:1)
似乎我们的服务器上存在权限问题,阻止了前端代码的更新,因此withCredentials
选项未通过。
将来有这个问题的人:请阅读问题,您将看到我们尝试的事情。重要的是要了解,对于CORS,需要反复发送某些标头才能发送Cookie。
很抱歉。...
答案 1 :(得分:0)
尝试下面的中间件...如果没有帮助,我将删除答案;)
<?php
namespace App\Http\Middleware;
use Closure;
use Symfony\Component\HttpFoundation\StreamedResponse;
class ModifyHeadersMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next( $request );
if($response instanceof StreamedResponse) {
$response->headers->set('Access-Control-Allow-Origin', '*' );
$response->headers->set( 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Authorization, Accept, Application' );
$response->headers->set( 'Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS' );
} else {
$response->header( 'Access-Control-Allow-Origin', '*' );
$response->header( 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Authorization, Accept, Application' );
$response->header( 'Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS' );
}
return $response;
}
}