내 Laravel + GatsbyJS 앱은 로그인 관리를 위해 auth:sanctum을 사용하고 다른 사용자에게는 서버 500 오류가 발생하지만 내 로그인은 제대로 작동합니다.
P粉215292716
2023-09-04 09:08:41
<p>그래서 저는 개발을 돕고 있는 앱(백엔드에 laravel을 사용하고 프론트엔드에 GatsbyJS를 사용)을 가지고 있습니다.
한 달 전에는 모든 사용자가 문제 없이 로그인할 수 있었습니다. 하지만 이제 모든 사용자가 프로덕션 환경에 로그인할 수 없다는 것을 알았습니다(나 제외). </p>
<p>login.jsx 파일</p>
<pre class="brush:php;toolbar:false;">const formChanged = async (e) =>
setError(false);
e.preventDefault();
setSubmitting(true);
loginData = getValues();
응답 = 로그인 대기(loginData.email, loginData.password);
setSubmitting(false);
if (응답.오류) {
setError(true);
setValue('비밀번호', '');
} 또 다른 {
탐색('/app/idm/');
}
};</pre>
<p>let response = wait login()은 api.js 파일에 있는 login이라는 메소드를 호출합니다</p>
<p>api.js 파일</p>
<pre class="brush:php;toolbar:false;">// 애플리케이션에 로그인
const 로그인 내보내기 = 비동기(이메일, 비밀번호) =>
// 요청 보내기
응답하자 = wait makeRequest('post', '/login', { 이메일, 비밀번호 });
// 오류가 없으면 토큰과 사용자를 설정합니다.
if (!response.error && isBrowser()) {
localStorage.setItem('idm_token', response.data.access_token);
let my_user = JSON.stringify(기다립니다(response.data.access_token));
localStorage.setItem('idm_user', my_user);
}
응답 반환;
};</pre>
<p>이메일과 비밀번호를 전달하면 이 데이터가 확인되며 이 시점에서 모든 사용자는 문제 없이 토큰을 생성할 수 있습니다. </p>
<p> (참고용으로 성소 토큰을 생성하는 코드)
api.php 파일</p>
<pre class="brush:php;toolbar:false;">Route::post('/login', function(Request $request) {
$login = $request->only('이메일', '비밀번호');
if (Auth::attempt($login)) {
$user = 사용자::where('email', $request['email'])->firstOrFail();
$token = $user->createToken('auth_token')->plainTextToken;
응답()->json([
'액세스 토큰' =>
'token_type' => '무기명'
]);
}
return response()->json(["message" => "인증 실패"], 401);
})->name('api.login');</pre>
<p>문제는 현재 auth:sanctum으로 보호되는 경로에 액세스하는 것 같습니다. 다시 말하지만 모든 사용자는 토큰을 생성할 수 있지만 내 로그인 정보만 경로에 액세스할 수 있습니다.
다른 모든 사용자에게는 서버 500 오류가 발생합니다.</p>
<p>my_user 세부정보를 가져오려고 할 때 api.js 파일에서 이런 일이 발생합니다. </p>
<pre class="brush:php;toolbar:false;">let my_user = JSON.stringify(await me(response.data.access_token));</pre>
<p>제가 겪고 있는 또 다른 문제는 프로덕션 환경의 laravel 애플리케이션이 몇 달 전에 오류 출력을 중단했고 프로덕션 환경의 오류 로깅 문제를 해결하는 방법을 알 수 없다는 것입니다(개발에서는 오류 로깅이 괜찮습니다). </p>
<p>자세한 내용이 부족해서 죄송합니다. 저는 이 모든 것이 매우 낯설고, 팁이나 시도해 볼 만한 것이 있으면 정말 감사하겠습니다. 답변을 얻지 못하더라도 저는 그 이상입니다. 이 문제를 배우고 해결하기 위해 노력할 의향이 있습니다. </p>
문제를 추가로 해결하기 위해 오류 로그를 받지 못하는 이유를 살펴보기로 했습니다.
저장 폴더와 그 내용을 777로 chmod하기로 결정했습니다
으아악콘텐츠를 777로 재귀적으로 설정하려면 -R을 추가하세요
실제로는 로그인 문제가 해결되었지만 권한 수준을 775로 복원한 후 일부 사용자는 다시 로그인할 수 있었지만 전부는 아니었습니다.
그런 다음 내 로그 파일/폴더에 권한 문제가 있어서 오류 로그가 인쇄되지 않는 이유가 아닐까 생각했습니다.
그래서 laravel.log 파일을 더 자세히 살펴보았습니다. 사용자(ubuntu:ubuntu)만이 읽을 수 있다는 것이 밝혀졌습니다. 그룹을 www-data
로 변경하기로 했어요 으아악이것은 나에게 매우 도움이 됩니다. laravel에 오류를 다시 기록할 수 있습니다!
이제 대략 다음과 같은 오류가 표시됩니다.
으아악그래서 저장소의 모든 권한을 확인해보니 내 데이터 폴더는 사용자만 접근할 수 있다는 것을 알게 되었습니다
www-data를 데이터 폴더에 그룹으로 추가했습니다:
으아악이제 문제가 해결되었습니다! (참고: 내 chmod 권한이 775로 복원되었습니다.)