【问题标题】:disable access to Laravel API from browser禁止从浏览器访问 Laravel API
【发布时间】:2019-02-24 12:46:56
【问题描述】:

如何限制对 GET 路由的直接访问?

示例 localhost/api/helloworld

如果我通过邮递员发送请求,我想得到响应,但如果我尝试在浏览器中打开 URL,我需要重定向到主页或给出一些 403 错误?

我应该使用一些标题来限制它还是在 Laravel 中有另一种方法来做到这一点?

【问题讨论】:

  • 你可以在 laravel 中创建一个中间件,在 header 中添加一个新参数并签入中间件。如果该参数获取,则授予访问权限,否则限制。
  • 我在想你可以在请求头中寻找content-type: application/json(邮递员可以设置这个,所有好的HTTP客户端都可以),但浏览器默认情况下不太可能设置那个头。否则,每个@LuckySaini 建议的另一个请求标头令牌将起作用。
  • 有两个很好的例子说明你如何可以做到这一点,但请重新考虑你为什么要这样做。我真的很喜欢在我的浏览器中查看 api,看看我能得到什么结果。
  • 您可以检查令牌并对其进行身份验证。

标签: laravel laravel-5.5


【解决方案1】:

使用以下代码从标头中检测请求的客户端。

public function isBrowserRequest()
{
  $browsers = ['Opera', 'Mozilla', 'Firefox', 'Chrome', 'Edge'];

  $userAgent = request()->header('User-Agent');

  $isBrowser = false;

  foreach($browsers as $browser){
    if(strpos($userAgent, $browser) !==  false){
      $isBrowser = true;
      break;
    }
  }

  return ['result' => $isBrowser];
}

【讨论】:

    【解决方案2】:

    执行此操作的标准方法是使用令牌。 Laravel 为您提供 API 身份验证,请点击此链接API Authentication (Passport)

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 1970-01-01
      • 2013-11-06
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      相关资源
      最近更新 更多