我有一个 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)
登录代码运行良好,它返回给我不记名令牌,但在发送带有此令牌的任何请求后,我收到未经身份验证的错误。我哪里出错了?由于相同的代码适用于另一台服务器。
我有一个解决方案。
出了什么问题?
出于某种原因,Apache 服务器具有忽略 Authorization 标头的模块,说这是为了安全(我不怀疑)。
我是怎么解决的?
我只是在 Apache 设置中禁用了以下模块:
在 httpd.conf 文件中,我添加了以下行(Linux/CentOS 7.6):
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |