【问题标题】:Node Js access to api laravelNode Js访问api laravel
【发布时间】:2018-06-22 10:43:54
【问题描述】:

您好,我在 laravel 中已经有一个 api,但我需要使用 express node js 访问。

这是我的功能

var data = querystring.stringify({
    _token: 'LhTsymoueRtcWtjP69MD1KEbDyGl0NGuewWOieER',
    propertiesString: properties
});

var options = {
    hostname: 'apiproperties.local',
    port: 80,
    path: '/properties/storeSB',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': Buffer.byteLength(data)
    }
    /*headers: {
      'Content-Type': 'application/json',
    }*/
};

var req = http.request(options, function(res) {
    res.setEncoding('utf8');
    console.log('Status: ' + res.statusCode);
    console.log('Headers: ' + JSON.stringify(res.headers));
    res.on('data', function (chunk) {
        console.log("body: " + chunk);
    });
});

req.write(data);
req.end();

这给了我错误 Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php 第 68 行,因为我不发送 _token,但我不知道如何在 nodejs 中发送令牌我在 nodejs 中没有视图,因为我不想使用我不需要它,那么如何在我的发布请求中发送令牌而不在一个视图中调用表单?问候

【问题讨论】:

  • PHP 代码期望令牌在哪里?作为自定义标题?在查询字符串中?在 POST 正文中?

标签: node.js


【解决方案1】:

你应该从 CSRF 保护检查中间件中排除你用 Laravel 编写的 api,默认情况下 VerifyCsrfToken 中间件应用于路由组 web 所以在这里你有两个选择:-

  1. 创建一个名为 api 的新中间件组
    用于创建中间件的代码 sn-p
    routes.php

    Route::group(['prefix' => 'api/v1','middleware' => ['api']], function () { Route::get('/hotel/list',[ 'uses' => 'YourController@function' ]); });

    验证CsrfToken.php

    protected $except = [ 'api/v1/*', ];

  2. 直接排除路由进行 CSRF 检查
    VerifyCsrfToken.php 中添加您要忽略以进行 CSRF 检查的所有 api 的 url

    class VerifyCsrfToken extends BaseVerifier { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'url_regex' ]; }

建议使用第一种方法,因为对于所有未来的新路由添加都可以解决,我们只需将该路由添加到此中间件组下即可。

如果成功或有任何疑问,请在 cmets 中告诉我。

【讨论】:

  • 对不起,我不回答,是的,我排除了验证的路线,谢谢xD
猜你喜欢
  • 2017-08-04
  • 2020-06-06
  • 2021-04-03
  • 2022-01-24
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
相关资源
最近更新 更多