laravel - Laravel Nova 自定义工具 - 如果未通过身份验证,则重定向到登录页面
问题描述
问题
在创建了几个 Laravel Nova 工具后,我发现即使用户在不同的选项卡中注销,也可以导航到自定义工具。
解释
在Laravel Nova 文档中,声明 Laravel Nova 开箱即用的授权中间件负责对您的工具路由组中指定的路由进行身份验证。这似乎有效;当我在另一个选项卡中注销并尝试导航到我的自定义工具时,它确实显示了视图,但它没有加载我尝试进行的任何 HTTP (Axios) 调用。它返回以下消息:
{message: "Unauthenticated."}
这是有道理的,因为 Authorization 中间件返回 a aborts the request with 403 status code
。Laravel Nova 使用AuthenticationException
文件来处理这个问题:
/**
* Render the exception.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function render($request)
{
if ($request->expectsJson()) {
return response()->json(['message' => $this->getMessage()], 401);
} elseif ($request->is('nova-api/*') || $request->is('nova-vendor/*')) {
return redirect()->to($this->location());
}
return redirect()->guest($this->location());
}
nova-api/*
对路由或路由进行的任何调用都会nova-vendor/*
被捕获并重定向到登录页面。因此,在未经身份验证的情况下尝试访问“常规”Laravel Nova 资源会导致被重定向到 Laravel Nova 的登录页面。
不幸的是,显示工具本身视图的路由是在一个单独的tool.js
文件中完成的,其中路由直接绑定到组件,如下所示:
Nova.booting((Vue, router, store) => {
router.addRoutes([
{
name: 'mailable-previewer',
path: '/mailable-previewer',
component: require('./components/Tool'),
},
])
})
我试过的
我尝试覆盖异常消息以返回重定向,但不幸的是,这不起作用,视图仍然可见,并且 Laravel Nova 登录页面仅在网络选项卡的响应中可见,因为它不会重定向用户直接地。
Tool.vue
我发现的一种解决方法是在自定义文件中执行 axios 调用,其中401 status code
应该重新加载页面(从而再次激活 Laravel Nova 的授权中间件,将用户重定向到登录页面)。
我想达到什么
在加载自定义工具组件之前,找到一种将未经身份验证的用户重定向到 Laravel Nova 登录页面的方法。这是否可能使用:
tool.js
使用某种中间件扩展文件以在用户未经身份验证时以某种方式阻止导航到选项卡?
非常感谢任何正确答案的方向!
解决方案
推荐阅读
- google-cloud-platform - 用于创建产品集资源的 Cloud Vision Product Search python API 无法返回处理结果
- scala - 如何在Scala中生成将数组拆分为两个子数组的所有排列?
- python - EC2 实例中的 .py 文件以在来自 S3 存储桶的事件上执行
- python - 如何用python分隔文本文件中的字符
- python - 画布中分层图像的事件处理
- asp.net-core - preLaunchTask 未在启动配置中的 ${command:pickRemoteProcess} 之前执行
- c# - 数据透视表聚合的 Excel 性能
- javascript - 如何调用rest api并将结果提供给后续的promise调用
- c++ - C++ char Arrays 与数组进行比较并分配单个值;
- java - 将项目添加到收藏夹数据库时更改图标颜色