Web 和 Api 路由的 Laravel 身份验证问题
Posted
技术标签:
【中文标题】Web 和 Api 路由的 Laravel 身份验证问题【英文标题】:Laravel Auth Problem for Web and Api Routes 【发布时间】:2021-04-29 12:29:39 【问题描述】:不幸的是,我找不到一个用户案例的解决方案,这实际上必须经常发生。
为了更好地描述它,我把我的 laravelapp 的路由结构(web 和 api)放在这里:
routes/web.php
get(start|products|product/id|contact|inprint|login|register)
get(checkout|checkout/(any))->middleware( auth ) // Checkout is a VUE App
routes/api.php
// only the Vue App use the api
get(user|user_orders|user_address) ->middleware( auth )
post (purchase_order) -> middleware(auth)
正如您可能看到的,我想保护网站的某些部分。此外,我想检查每个查询用户是否已登录,以便在导航栏中显示注销按钮。
-
这甚至可以通过身份验证系统实现吗?
是否可以使用基于令牌 (JWT) 的身份验证系统来保护 webroutes?我一直认为不会。
感谢您的帮助!
【问题讨论】:
【参考方案1】:你可以反过来。这将使您可以灵活地检查您的控制器中的身份验证
Auth::check();
通过这些简单的步骤,您还可以在 API 路由中检查身份验证。因此,您也可以将 JWT 与 auth web 路由集成在一起。
你只需要添加
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
在您的“API”中间件组中
'api' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
\\ existing code...
],
谢谢,
【讨论】:
您的解决方案对我不起作用。我通过 webroute 构建并登录(我使用脚手架登录 laravel/breeze)。之后,我可以在 web 路由中使用 auth::check() 而不是在 api 路由中识别用户身份验证状态。我忘记了什么? 我已经尝试了一点,它的工作原理是 web 和 api 受 auth 保护。在 web 路由中:->middelware('auth') 在 api 路由中:->middelware('auth:api') 但是,使用此解决方案,响应不好或错误。 Laravel 尝试在用户未登录时立即将用户重定向到登录。无论是 xhr 请求还是正常的 Web 请求。如果 xhr 请求返回带有 json ['status'=>'Unauthenticated'] 的 404,那将是可取的。您对此有解决方案吗?以上是关于Web 和 Api 路由的 Laravel 身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.3 + Passport:总是未经身份验证的错误