我的 laravel + 惯性应用程序有问题。
假设我有这条路线:
Route::get('/tasks/{task}/apply/', [ApplicationController::class, 'create'])
->middleware('auth')
->name('applications.create');
如您所见,该路由受到身份验证中间件的保护。
在我的控制器中,我正在调用一个策略:
public function create(Task $task)
{
Gate::authorize('create', [Application::class, $task]);
}
政策总是拒绝此示例的请求:
public function create(User $user, Task $task): Response
{
return Response::deny('You are not allowed to apply to this task.');
}
我没有改变
AuthenticatedSessionController.php
/**
* Handle an incoming authentication request.
*/
public function store(LoginRequest $request): RedirectResponse
{
$request->authenticate();
$request->session()->regenerate();
return redirect()->intended(AppServiceProvider::HOME);
}
如果我尝试访问受保护的路由,我希望我的 Laravel 应用程序表现如下。
应用程序会执行以下操作:
由于模态打开,这对我来说看起来像是惯性问题。
在 Chrome 开发者工具中,这些是我的要求:
Request-Url:
http://127.0.0.1:8000/tasks/9c659414-220d-427a-ab16-3fea3a76fdcd/apply
Request-Method:
GET
Statuscode:
302 Found
Remote-Address:
127.0.0.1:8000
Guidelines for referrer URL:
strict-origin-when-cross-origin
Location: http://127.0.0.1:8000/login
Request-URL:
http://127.0.0.1:8000/login
Request-Method:
GET
Statuscode:
200 OK
Remote-Address:
127.0.0.1:8000
Guidelines for referrer URL:
strict-origin-when-cross-origin
Request-URL:
http://127.0.0.1:8000/login
Request-Method:
POST
Statuscode:
302 Found
Remote-Address:
127.0.0.1:8000
Guidelines for referrer URL:
strict-origin-when-cross-origin
Location: http://127.0.0.1:8000/tasks/9c659414-220d-427a-ab16-3fea3a76fdcd/apply
Request-URL:
http://127.0.0.1:8000/tasks/9c659414-220d-427a-ab16-3fea3a76fdcd/apply
Request-Method:
GET
Statuscode:
403 Forbidden
Remote-Address:
127.0.0.1:8000
Guidelines for referrer URL:
strict-origin-when-cross-origin
我该如何解决这个问题?
附加信息:
如果您需要更多信息,请告诉我
好的,现在可以了。但我不知道这是否适用于惯性重定向以外的某些情况:
/**
* Handle an incoming authentication request.
*/
public function store(LoginRequest $request): \Illuminate\Http\RedirectResponse | \Symfony\Component\HttpFoundation\Response
{
$request->authenticate();
$request->session()->regenerate();
// check if inertia request
if ($request->inertia()) {
return Inertia::location(redirect()->intended(AppServiceProvider::HOME)->getTargetUrl());
} else {
return redirect()->intended(AppServiceProvider::HOME);
}
}
也许有人可以告诉我这是否正确?!