【问题标题】:How Laravel middleware auth:api detect token from cookie?Laravel 中间件 auth:api 如何从 cookie 中检测令牌?
【发布时间】:2021-08-21 07:58:29
【问题描述】:

我只是想在 Laravel 5.7 上使用 cookie 使我的身份验证流程更加安全

这是我的代码

/**
 * auth logic
 */
return response()->json(["status" => "logged in"], 200)->cookie('token', $token, $lifetime);

然后cookie会被保存在浏览器上,并在每个请求中使用。

使用 Axios 的标题

"cookie":"token={token}"

我使用默认中间件验证身份验证

Route::group(['middleware' => ['auth:api']])

但是auth:api不识别,我可以通过手动检测cookie来制作自定义中间件,但是我不能使用上面的auth()->user()功能。 有什么解决办法吗?

【问题讨论】:

  • 如果你想使用cookie,只需使用默认的auth中间件而不是auth:api
  • @MuhammadDyasYaskur 好吧,让我试试

标签: laravel authentication middleware


【解决方案1】:

根据您的示例代码,我相信您的应用是基于无状态架构构建的,其中您拥有 JavaScript 客户端和 laravel api。 现在我有点困惑为什么您不希望客户端存储令牌,如果您只想逃避跨站点脚本漏洞(XSS),那么您必须准备处理跨站点请求伪造(CSRF)如果您存储浏览器 cookie 中的令牌。 关于中间件无法找到令牌,默认情况下,中间件配置为在请求标头(特别是授权标头)中查找令牌,因此如果您决定将其存储在 cookie 中,则必须找到一种方法来更改在 api 中间件中查找令牌,不幸的是我以前在 laravel 中没有做过。

【讨论】:

    【解决方案2】:

    API 通常不存储和发送 cookie。因此 api 令牌认证保护不会在 cookie 中查找令牌。有多个选项可以发送,就像 axios 中最简单的一样:

    {
       headers: {
         Authorization: `Bearer ${token}`
       }
    }
    

    【讨论】:

    • 目前,我正在使用它,但我不希望前端存储令牌,但如果我们使用 cookie,浏览器将自动保存 cookie
    • 你真的不应该使用 API 路由进行浏览器交互。如果使用浏览器并依赖 cookie,则使用 session 和 web auth guard
    猜你喜欢
    • 2019-03-05
    • 2021-12-08
    • 2021-01-21
    • 2017-03-23
    • 1970-01-01
    • 2015-09-03
    • 2021-05-05
    • 2019-11-30
    • 2021-04-03
    相关资源
    最近更新 更多