所以我有一个正在帮助开发的应用程序(laravel后端,GatsbyJS前端(。一个月前,所有用户都可以顺利登录。但我发现,现在,所有用户都无法登录生产(除了我(。
login.jsx文件
const formChanged = async (e) => {
setError(false);
e.preventDefault();
setSubmitting(true);
let loginData = getValues();
let response = await login(loginData.email, loginData.password);
setSubmitting(false);
if (response.error) {
setError(true);
setValue('password', '');
} else {
navigate('/app/idm/');
}
};
让response=wait-login((调用一个方法,在api.js文件中登录
api.js文件
// Login to the application
export const login = async (email, password) => {
// make request
let response = await makeRequest('post', '/login', { email, password });
// if not an error, set the token and user
if (!response.error && isBrowser()) {
localStorage.setItem('idm_token', response.data.access_token);
let my_user = JSON.stringify(await me(response.data.access_token));
localStorage.setItem('idm_user', my_user);
}
return response;
};
当我们传递电子邮件和密码时,这会得到验证,此时,所有用户都可以毫无问题地生成令牌。
(仅供参考,生成圣地令牌的代码(api.php文件
Route::post('/login', function(Request $request) {
$login = $request->only('email', 'password');
if (Auth::attempt($login)) {
$user = User::where('email', $request['email'])->firstOrFail();
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json([
'access_token' => $token,
'token_type' => 'Bearer'
]);
}
return response()->json(["message" => "Authentication failed"], 401);
})->name('api.login');
问题似乎是访问当前auth:saucum保护的路由。同样,所有用户都创建了一个令牌,但只有我的登录详细信息允许我访问路由。所有其他用户都收到服务器500错误。
当我们试图获取my_user的详细信息时,这种情况会出现在api.js文件中:
let my_user = JSON.stringify(await me(response.data.access_token));
我遇到的另一个问题是,我的laravel应用程序在生产中几个月前停止输出错误,我一辈子都不知道如何修复生产中的错误日志记录(它在开发中的错误记录很好(。
对缺乏细节表示歉意,我对这一切还很陌生,如果有任何建议或东西可以尝试,即使我没有得到答案,我也会非常愿意努力,学习并努力解决这个问题。
为了进一步排除故障,我决定调查为什么没有得到错误日志。
我决定将存储文件夹及其内容设置为chmod 777
chmod -R 777 storage/
添加-R以递归地将内容设置为777
这实际上解决了我的登录问题,但我注意到,在恢复到权限级别775时,我的一些用户能够再次登录,但不是所有用户。
然后我想,也许我的日志文件/文件夹有权限问题,也许这就是我没有打印错误日志的原因?
因此,我进一步研究了我的laravel.log文件。原来它被设置为只由用户读取(ubuntu:ubuntu(。我决定将此组更改为www数据
chown ubuntu:www-data laravel.log
这对我来说创造了奇迹,我再次能够在laravel中记录错误日志!
我现在看到了我的错误,类似于:
production.ERROR: Unable to create lockable file: /var/www/main/backend/storage/framework/cache/data/d5/........etc...etcc
所以我检查了存储下的每个权限,发现我的数据文件夹只设置为用户可以访问
我添加了www数据作为数据文件夹的组:
chown ubuntu:www-data data
现在,我的问题解决了!(注意:我的chmod权限回到775(