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 对请求进行身份验证。
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |