Elastic Beanstalk 不接受来自 Axios 的标头

Has*_*rki 1 authentication amazon-web-services react-native lumen axios

我正在制作一个以 Lumen API 作为后端的 React Native 应用程序。我想用一个简单的中间件来保护我所有的路由。我修改了AuthServiceProvider以检查请求是否具有带有令牌的标头,如果它确实检查该令牌是否属于用户。

身份验证服务提供者

$this->app['auth']->viaRequest('api', function ($request) {
        if($request->header('access_token')){
            return User::where('access_token', $request->header('access_token'))->first();
        }

        return null;
    });
Run Code Online (Sandbox Code Playgroud)

一个简单的Axios请求看起来像这样,

axios.get('url/to/site', {headers:{access_token: '12345667890ABC'}})
    .then(res => console.log(res))
    .catch(err => err.response);
Run Code Online (Sandbox Code Playgroud)

路由放置在 web.php 文件中的auth中间件内。我知道在使用移动应用程序时我们不必担心 CORS,所以这不是问题。

奇怪的是,代码似乎可以在我的本地主机上运行并验证用户身份,但是当我部署到 AWS ElasticBeanstalk 时,它返回未授权的. 我现在正在使用 AWS 的免费套餐。我的实例正在运行Amazon Linux AMI

我也试过这样设置axios标头;

axios.defaults.headers.common['access_token'] = '12345667890ABC';
Run Code Online (Sandbox Code Playgroud)

为了让您安心,我还通过 Lumen 中的另一个中间件添加了一些额外的标头。

    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Headers', 'access_token')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
Run Code Online (Sandbox Code Playgroud)

我也测试了来自 Postman 的本地和 AWS 路由,无论有没有 access_token。结果是一样的,它适用于本地主机,但不适用于 AWS,其中缺少标头access_token。

起初我认为问题可能是 AWS 上的配置或权限问题,但我也在一个简单的共享托管帐户上尝试了整个过程,中间件仍然没有通过 Postman 对请求进行身份验证。

Ris*_*ani 5

从头变量中删除下划线,例如:- header_var_val = "some value"替换为--> headervarval = "some value"