【发布时间】:2019-12-11 16:07:15
【问题描述】:
我有一个 API 方法的要求(由著名的包 tymon/jwt-auth 保护),我还需要能够使用基于基本会话的 web 中间件访问它。
我不想在api.php 和web.php 中重复该路线,即使这完全可行。
我尝试将两者都添加到路由中,但它们根本不起作用,例如:['auth:api', 'web']
我还尝试创建一个新的中间件,目的是同时检查 api 和 web,如下所示:
class CombinedAuth
{
public function handle($request, Closure $next)
{
$web = Auth::guard('web')->user();
if ($web) {
return $next($request);
}
$api = Auth::guard('api')->user();
if ($api) {
return $next($request);
}
if(!$web && !$api) {
throw new AuthorizationException;
}
}
}
这也行不通。 api 中间件工作正常,但 web 中间件不能,它总是让我退出并重定向到登录页面。
那么在 Laravel 5.8 中是否有一种巧妙的方法可以同时使用 api 和 web 中间件保护路由?
【问题讨论】:
-
编写您使用两个中间件创建的路由的代码
-
@GiacomoM 我已经写过了。
['auth:api', 'web']作为middleware值。 -
您没有写出您创建的确切路线。无论如何尝试在网络中间件中放置一个 dd 以查看它是否正确调用。
-
@GiacomoM
web中间件是内置的,我无权访问该文件。 -
请问,为什么你需要一个路由同时有 api 和 web 中间件?或者你只是想让 apis 和 web 路由一起工作?
标签: php laravel authentication middleware