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');
我想在 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');