我正在做一个Laravel 9, InertiaJS和vue项目,用户可以通过products/create
路由提交一个新产品,然后发送到ProductController@store,它做了它应该做的所有事情然后应该将用户重定向到新创建的产品在子域路由上,如http://username.example.test/my-new-product
我遇到的问题是,我一直得到下面的错误和重定向不工作:
Access to XMLHttpRequest at 'http://user.example.test/my-first-product' (redirected from 'http://example.test/products/create') from origin 'http://example.test' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
代码如下:
1-表单:
const form = useForm("createProduct", {
webshop_id: null,
title: null,
price: null,
type: null,
currency: null,
description: null,
thumbnail: null,
});
const submit = () => {
form.post(route("products.create"), {
onSuccess: () => form.reset(),
});
};
2-产品创建路由器:
Route::middleware([
'auth:sanctum',
config('jetstream.auth_session'),
'verified',
])->group(function () {
Route::post('products/create', [ProductController::class, 'store'])->name('products.create');
});
3-控制器-存储带有用户详细信息的新产品并重定向(这不起作用)以显示产品
public function store(StoreProductRequest $request)
{
// Code
return redirect()->route('products.show', [$user, $product]);
}
4- show route and controller@show
Route::domain('{user:username}.' . env('APP_URL'))->group(function () {
Route::get('{product:slug}', [ProductController::class, 'show'])->name('products.show');
});
public function show(User $user, Product $product)
{
return Inertia::render('Products/Show', [
'user' => $user,
'product' => $product,
'thumbnails' => $product->productimages
]);
}
我看到@reinink在本期中解释我们现在可以使用惯性::location
我能让它工作的唯一方法是返回这是ProductController@store:
return Inertia::location('http://' . $user->username . '.example.test/' . $validated['slug']);
但是它会导致整个页面刷新,这破坏了拥有单页应用程序的整个概念,当我要将应用程序投入生产时,我将不得不记住将"http"更改为"https"并将域更改为实际域。我希望我做错了什么,但经过几个小时的搜索解决方案,我开始认为Laravel惯性应用程序不支持子域名重定向
我找到了一个解决方案,为我解决了这个Stackoverflow答案的CORS错误
对cors.php进行这些更改为我解决了这个问题:
'paths' => ['api/*', '*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => ['x-inertia'],
'max_age' => 0,
'supports_credentials' => false,
,但我正面临着一个问题,它重定向到一个url,完全忽略子域。请在这里找到新问题