如何解决Laravel Passport 登录无法使用 Jetstream Inertia 正确重定向
我已经使用 Laravel Passport 实现了一个 OAuth 系统,但是该系统的登录和所有身份验证由 Laravel Jetstream 和 Inertia 处理。
当我想请求代码(使用授权代码授予)时,我的应用程序将我重定向到我的 OAuth 服务器,该服务器在继续之前要求我登录,此屏幕是 Laravel Jetstream 使用 Inertia(Vue)登录生成的屏幕)。当我登录时,它会将我重定向到授权页面,但这种重定向很奇怪,因为此页面显示在 Vue (Inertia) 页面内,浏览器中的 URL 不会更新,如果我接受授权请求它将我重定向回我的应用程序,但重定向在同一个 Vue 页面内,我的意思是,URL 与我的 OAuth 服务器登录名相同,但视图是我请求代码的应用程序。
我认为Vue中的重定向有问题,因为授权页面没有使用Inertia(是Laravel Passport的默认授权页面),我不知道如何解决,你能帮我吗?
这是一张图片:
如你所见,它似乎是在模态中,但它是一个惯性错误页面,里面显示的是授权页面,是一个我不知道如何修复的重定向错误
解决方法
如果请求来自 Inertia,您必须更改登录操作的默认视图。您可以在 FortifyServiceProvider 中完成。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\ServiceProvider;
use Inertia\Inertia;
use Laravel\Fortify\Fortify;
class FortifyServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Fortify::loginView(function () {
if (Request::inertia()) {
return Inertia::location(url()->current());
}
return view('auth.login');
});
}
}
,
我和你有同样的问题 我是这样解决的:
在文件 AuthenticatedSessionController.php
/**
* Handle an incoming authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
if ($request->session()->has('url.intended')) {
return Inertia::location(session('url.intended'));
}
return redirect()->intended(RouteServiceProvider::HOME);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。