我正在制作一个带有Lumen API作为后端的React Native App。我想用一个简单的中间件来保护我的所有路由。我修改了 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验证请求。
答案 0 :(得分:4)
Remove underscores from the header variables, example:- header_var_val = "some value" replace it with --> headervarval = "some value"