Laravel 护照在生产中返回未经身份验证但可在本地主机上使用

vin*_*svl 1 php laravel

我有一个 Laravel 项目,它在 X 服务器上运行良好,并将相同的项目(相同的代码)放在另一台 Y 服务器上,令我惊讶的是经过身份验证的路由不起作用,我总是收到未经身份验证的错误,为什么会发生这种情况?

{
  "message":"Unauthenticated.",
  "success":false,
  "status_code":500
}
Run Code Online (Sandbox Code Playgroud)

我使用的命令: - php artisan 护照:安装 - php artisan 配置:缓存 - php artisan 缓存:clear - php artisan 密钥:生成

然而我仍然收到未经身份验证的错误,令牌被前端正确传递,它是一个不记名令牌,当用户使用 createToken ('myApi') -> accessToken 方法登录时生成此令牌

public function login(AuthLoginRequest $request)
{
    $user = User::with('role')->where(['email' => $request->email])->get()->first();
    if(!$user){
        abort(404, 'userNotFound');
    }

    if(!password_verify($request->password, $user->password)){
        abort(401, 'invalidCredentials');
    }

    $token = $user->createToken('MyApiToken')->accessToken;
    Access::customCreate($request->all(), $user);

    $response = [
        'id' => $user->id,
        'name' => $user->name,
        'email' => $user->email,
        'profile_image' => $user->profile_image,
        'token' => $token,
        'old_password_changed' => $user->old_password_changed
    ];

    return response()->json($response, 200);
}
Run Code Online (Sandbox Code Playgroud)

登录代码运行良好,它返回给我不记名令牌,但在发送带有此令牌的任何请求后,我收到未经身份验证的错误。我哪里出错了?由于相同的代码适用于另一台服务器。

vin*_*svl 5

我有一个解决方案。

出了什么问题?

出于某种原因,Apache 服务器具有忽略 Authorization 标头的模块,说这是为了安全(我不怀疑)。

我是怎么解决的?

我只是在 Apache 设置中禁用了以下模块:

  • mod_cgid
  • mod_fcgid
  • mod_proxy_scgi

在 httpd.conf 文件中,我添加了以下行(Linux/CentOS 7.6):

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Run Code Online (Sandbox Code Playgroud)