Elastic Beanstalk不接受来自Axios

时间:2017-12-21 02:20:52

标签: amazon-web-services authentication react-native axios lumen

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

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;
    });

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

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

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

奇怪的是,代码似乎可以在我的localhost上运行并对用户进行身份验证,但是当我部署到AWS ElasticBeanstalk时,它会返回未经授权的。我现在正在使用免费的AWS层。我的实例正在运行 Amazon Linux AMI

我也试过设置 axios 标题;

axios.defaults.headers.common['access_token'] = '12345667890ABC';

为了安心,我还通过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');

我也测试了Postman的本地和AWS路由,无论是否有access_token。结果是相同的,它适用于localhost但不适用于AWS,其中标头 access_token刚刚丢失。

起初我认为问题可能是AWS上的配置或权限问题,但我也在一个简单的共享主机帐户上尝试了整个过程,而中间件仍未通过Postman验证请求。

1 个答案:

答案 0 :(得分:4)

Remove underscores from the header variables, example:- header_var_val = "some value" replace it with --> headervarval = "some value"