Laravel 多个中间件中的路由

Laravel route in multiple middelwares

我想在 auth:api 中间件内部和外部使用相同的路由。

现在,如果我将它包含在两者中,即使用户已登录,也只会考虑 auth:api 中的一个。

有没有一种方法,如果用户已登录,它会转到 auth:api,如果没有,它会退出任何中间件?

这样做的原因是,如果用户已经登录,我想访问用户信息,为此需要经过auth:api.

您的应用程序中不可能有多个相同的路由并独立工作。 Laravel 将匹配它在您的路线图中找到的第一个。

创建一个路由并在您的控制器中检查身份验证。

if (Auth::check()) {
    // The user is logged in...
}

只要您在请求中包含令牌,就可以访问当前的 User

开箱即用,Laravel 会将默认守卫设置为 web。当你将路由放在 auth 中间件下时,它会将默认守卫设置为传递给中间件的任何内容,即当你有 auth:api 时,它会将默认守卫设置为 api请求。

如果您希望能够访问 User 而无需它位于 auth:api 中间件下,您只需要明确说明应该使用什么保护程序,例如

auth('api')->user(); // or Auth::guard('api')->user();

同样适用于check()

auth('api')->check(); // or Auth::guard('api')->check();

或者如果您使用的是 Request 对象:

$request->user('api'); // or request()->user('api');