【问题标题】:How to authenticate API requests in Laravel?如何在 Laravel 中验证 API 请求?
【发布时间】:2017-08-28 10:20:24
【问题描述】:

我目前正在使用 Laravel 5(.4) 构建某种基于帖子的 Web 应用程序。我决定为每个帖子异步加载评论部分(并定期刷新)。经过一番研究,我决定编写一个小型集成 REST API(使用 Laravel 的 api 路由),它应该响应通过 AJAX 发出的请求>。
但是,如果 验证传入请求,我将面临问题。以发表评论的请求为例。您究竟会如何建议这样做?

【问题讨论】:

  • 您可以使用 jwt 或基于简单令牌的身份验证。 Laravel 5.4 默认应该有一个令牌保护
  • 顺便说一句,这是一个固执己见的问题。所以你可能会得到一些反对意见。
  • @GordonFreeman 好吧,我问是因为我不知道答案,所以我也不知道这个问题是自以为是的。不过,感谢您指出!

标签: laravel api authentication request


【解决方案1】:

如果您从浏览器发出 AJAX 请求并且您已登录,那么您不需要使用 Laravel Passport 令牌。 您可以定义某些路由,这些路由将在 webapi/comments/get 这样的请求上使用 web,auth 中间件。

Route::group(['middleware' => ['web','auth]], function () {
        Route::get('webapi/comments/get', 'CommentsController@get');
}

并像在 Web 请求中一样使用 Auth Facade,即 Auth::check(), Auth::user() 等,并像这样以 JSON 格式返回数据。

class CommentsController extends Controller
{
    public function get(Request $request)
    {
         if($request->acceptsJson()){
            $data = array();

            // add data

            return response()->json([
                   "data"=> $data,
                   "status" => true
                  ]);
         }else{
            return abort(404);
         }

    }
}

您还可以在 AJAX 请求中将 Accept 标头发送为 application/json 并在控制器中检查请求是否为 $request->acceptsJson() 并决定在从浏览器地址栏加载 URL 或作为 AJAX 请求时显示内容。

Laravel Passport 令牌在没有会话和管理 cookie 的情况下很有用。

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    "Passport 包含一个身份验证保护,它将验证传入请求的访问令牌。一旦您将 api 保护配置为使用护照驱动程序,您只需在任何需要有效访问令牌的路由上指定 auth:api 中间件" - 来自 Laraven 文档。
    显然我必须配置护照,然后配置 auth:api 中间件以使用护照驱动程序。如果我错了,请纠正我:)

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2017-10-01
      • 2015-09-24
      • 2018-09-13
      • 2023-03-14
      • 1970-01-01
      • 2018-10-16
      • 2014-06-03
      • 1970-01-01
      相关资源
      最近更新 更多