我已经使用 Laravel Passport 实现了 OAuth 系统,但该系统的登录和所有身份验证均由具有 Inertia 的 Laravel Jetstream 处理。
当我想要请求代码(使用授权代码授予)时,我的应用程序将我重定向到我的 OAuth 服务器,该服务器在继续之前要求我登录,此屏幕是 Laravel Jetstream 使用 Inertia (Vue) 登录生成的屏幕。当我登录时,它会将我重定向到授权页面,但是这个重定向很奇怪,因为该页面显示在 Vue(惯性)页面内,浏览器中的 URL 不会更新,并且如果我接受授权请求它将我重定向回我的应用程序,但重定向位于同一个 Vue 页面内,我的意思是,URL 与我的 OAuth 服务器登录名相同,但视图是请求代码的应用程序。
我认为 Vue 中的重定向存在问题,因为授权页面没有使用 Inertia(Laravel Passport 的默认授权页面),而且我不知道如何修复它,你能帮我吗?
这是一张图片:
正如你所看到的,它似乎是在模态中,但是是一个惯性错误页面,里面显示的是授权页面,是一个重定向错误,我不知道如何修复
我用 Inertia 安装了 Laravel。我在里面得到了这个resources/js/app.js:
require('./bootstrap');\n\n// Import modules...\nimport { createApp, h } from 'vue';\nimport { App as InertiaApp, plugin as InertiaPlugin } from '@inertiajs/inertia-vue3';\nimport { InertiaProgress } from '@inertiajs/progress';\n\nconst el = document.getElementById('app');\n\ncreateApp({\n render: () =>\n h(InertiaApp, {\n initialPage: JSON.parse(el.dataset.page),\n resolveComponent: (name) => require(`./Pages/${name}`).default,\n }),\n})\n .mixin({ methods: { route } })\n .mixin(require('./translation'))\n .use(InertiaPlugin)\n .mount(el);\n\nInertiaProgress.init({ color: '#4B5563' });\n\nRun Code Online (Sandbox Code Playgroud)\n正如您可能看到的那样.mixin({ methods: { route } })。我可以用来this.route('name.of.route')从 \xcb\x99routes` 文件夹生成命名路由。
我想修改route方法以在每次生成路由时默认添加前缀。如何调整 Inerta 的route方法。
我一直在使用 Laravel 支持的 API 和 VueJS 支持的前端,这是两个用于单页面应用程序的独立项目。现在我想切换到 Laravel Jetstream 和 Inertia.js,因为我可以在单个项目中创建 SPA。这是惯性如何工作的一个例子 -
class UsersController extends Controller
{
public function index()
{
$users = User::active()
->orderByName()
->get(['id', 'name', 'email']);
return Inertia::render('Users', [
'users' => $users
]);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以定义Route::get('users',['UserController::class','index']);并获取用户列表localhost:8000/users并在网页中查看用户列表。
我的问题是,我可以在移动应用程序中使用相同的控制器和 API 响应方法吗?
我必须构建具有相同功能的网络应用程序和移动应用程序。对于网络,我需要惯性响应,对于移动应用程序,我需要 json 响应。为了在 Laravel 项目中显示用户列表,我可以使用上面的代码。但是,如何返回return response($users);与移动应用程序中的 JSON 相同的响应呢?我可以创建 API 路由并api.php创建单独的控制器或方法,或者为 API 或 Inertia 响应添加条件,但我认为可能有更好的方法来使用相同的控制器和方法处理 Inertia 和 JSON 响应。
我想移动应用程序,并且正在寻找新技术。我没有使用 Laravel 的经验,但我想知道如果我想创建一个 Laravel + React Web 应用程序,我是否还需要查看 Inertia,或者我可以在没有 Inertia 的情况下执行 Laravel + React 吗?