在 Laravel 5 中为非 Ajax 路由设置请求(而非响应)标头

Posted

技术标签:

【中文标题】在 Laravel 5 中为非 Ajax 路由设置请求(而非响应)标头【英文标题】:Set Request (not Response) Headers in Laravel 5 for Non-Ajax Routes 【发布时间】:2016-01-11 09:16:44 【问题描述】:

实际上,我完全感到困惑,这是一项很难完成和/或找到任何相关信息的任务。我的猜测是它一定很简单,没有人需要问它(除了我!:-)),所以我希望有人能轻松地为我指出正确的方向......

我需要在我的请求中设置标题 - 而不是在我的响应中(我已经处理了那部分),而不是 Ajax 路由(我也处理了那部分)。我到底如何在 Laravel 5.1 的内部应用程序路由上实现这一点?

基本上,我需要将“授权”标头附加到某些请求。 (即

$request->headers->set('Authorization', 'my-authorization-token'); 

) 但是,这行代码不起作用。不管我把它放在哪里。它不适用于中间件。它不适用于routes.php。它不适用于我的控制器......它只是无法正常工作。 (为了清楚起见,'$request' 是 'Illuminate\Http\Request')。

我错过了什么?在发送请求之前在哪里/如何设置请求标头?请帮忙!提前致谢。

【问题讨论】:

【参考方案1】:

这里的一些答案可能会给你一个想法,你可以根据要求调整它们:Where can I set headers in laravel

这看起来也很相关:Laravel 5 / Lumen Request Header?

【讨论】:

感谢您的回复,@Will Sheppard。不幸的是,我已经浏览了这两个 SO 帖子......第一个实际上是针对 Response 标头(我已经处理过),第二个是关于从 Request 标头中检索信息,而不是设置它。不过,我感谢您的帮助。 :-)【参考方案2】:

请求从客户端发送到服务器(即您的 Laravel 应用程序)。因此,您使用 javascript 在客户端站点上设置请求标头。

Laravel 文档中有一个 example 使用 jQuery 设置 X-CSRF-TOKEN 标头。

$.ajaxSetup(
        headers: 
            'X-MY-HEADER': 'whateveryouwant
        
);

使用 VueJS 会是这样的

Vue.http.headers.common['X-MY-HEADER'] = 'whateveryouwant';

【讨论】:

谢谢@mniess。我很感激帮助。实际上,我已经设置了基本的 AJAX(和 Vue)请求标头。这都很好。 JS 不是问题。我想弄清楚的是如何在不涉及 AJAX 的内部请求上从 Laravel 应用程序中设置请求标头。这就是我难住的地方。不过谢谢。 :-) 如果需要操作Request headers,则需要使用Javascript。也许你正在走向死胡同?你想达到什么目的?您需要标头做什么? 是的,@mniess,我开始认为这里最有可能出现“死胡同”的情况。我需要标头才能提供令牌(在对我的应用程序的请求中),并且无论我从何处发送请求(即,Vue 实例或内部路由),我都需要能够发送该令牌不是从我的 Vue 页面提供的)。如果我不发出内部请求,这将很容易,因为如果我使用来自外部域的 Curl,我可以设置我的标头,并且当我使用 Vue 时这很容易,但是......显然......否则这是不可能的,这看起来很奇怪,但确实如此。 但是你从哪里得到那个令牌?反正内部不可用吗? 再一次。客户端负责设置标头。除非您安装浏览器插件或使用 javascript,否则您无法在简单链接或表单请求上设置标题。作为客户端的网络浏览器通常不允许设置您自己的标头。我猜你正在将它用于 JSON Web Tokens。这些是用于针对节点后端(即 socket.io)授权 js 前端。您的常规请求应该已经通过 Laravel 内置授权进行了授权。【参考方案3】:

你需要创建一个新的请求对象,然后像这样设置头部:

// e.g., Inside controller method

$request = new \Illuminate\Http\Request();
$request->setMethod('POST'); // or whatever your request type is
$request->header('Authorization', 'my-authorization-token');

【讨论】:

以上是关于在 Laravel 5 中为非 Ajax 路由设置请求(而非响应)标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.5 中为选定的请求类设置自定义响应

在 laravel 5.4 中为某些路由禁用 csrf 令牌?不工作[重复]

在 Express JS 中为 Ajax 设置 REST 路由,仅用于 Backbone

在 Ajax 调用中传递完整 URL 作为参数 - Laravel 5.1 路由

Laravel 5:在路由中获取 ajax 数据并传递给控制器

使用ajax从控制器调用函数的新路由或其他方式? Laravel 5.2,阿贾克斯