私のLaravel + GatsbyJSアプリはログイン管理にauth:sanctumを使用しています。他のユーザーはサーバー500エラーを受け取りますが、私のログインは正常に機能しています
P粉215292716
2023-09-04 09:08:41
<p>それで、開発を手伝っているアプリ (バックエンドに laravel、フロントエンドに GatsbyJS を使用) があります。
1 か月前、すべてのユーザーが問題なくログインできました。しかし、現在、すべてのユーザーが本番環境にログインできないことがわかりました (私を除く)。 </p>
<p>login.jsx ファイル</p>
<pre class="brush:php;toolbar:false;">const formChanged = async (e) => {
setError(false);
e.preventDefault();
setSubmitting(true);
ログインデータ = getValues(); にしましょう。
let 応答 = await ログイン(loginData.email、loginData.password);
setSubmitting(false);
if (response.error) {
setError(true);
setValue('パスワード', '');
} それ以外 {
ナビゲート('/app/idm/');
}
};</pre>
<p>let response = await login() は、api.js ファイル</p> にある login という名前のメソッドを呼び出します。
<p>api.js ファイル</p>
<pre class="brush:php;toolbar:false;">// アプリケーションにログインします
エクスポート const ログイン = 非同期 (電子メール、パスワード) => {
// リクエストを送信
let response = await makeRequest('post', '/login', { メールアドレス, パスワード });
// エラーがなければ、トークンとユーザーを設定します
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);
}
応答を返します。
};</pre>
<p>電子メールとパスワードを渡すと、このデータが検証され、この時点ですべてのユーザーが問題なくトークンを生成できます。 </p>
<p> (参考のみ、Sanctum トークンを生成するコード)
api.php ファイル</p>
<pre class="brush:php;toolbar:false;">Route::post('/login', function(Request $request) {
$login = $request->only('メールアドレス', 'パスワード');
if (認証::試行($login)) {
$user = User::where('email', $request['email'])->firstOrFail();
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json([
'access_token' => $token,
'token_type' => 'ベアラー'
]);
}
return response()->json(["メッセージ" => "認証に失敗しました"], 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>私が抱えているもう1つの問題は、本番環境のlaravelアプリケーションが数か月前にエラーの出力を停止し、本番環境でのエラーログの問題を修正する方法がわからないことです(開発中はエラーログは問題ありません)。</p>
<p>詳細が足りず申し訳ありませんが、私はこのようなことにはまったく慣れていないので、何かヒントや試してみるべきことがあれば、本当に感謝します。たとえ答えが得られなかったとしても、私は以上のことを考えています。この質問を学び、解決することに喜んで取り組みます。 </p>
問題をさらにトラブルシューティングするために、エラー ログを受信しない理由を調べることにしました。
ストレージフォルダーとその内容をchmod 777
に設定することにしました。 リーリー-R を追加してコンテンツを再帰的に 777 に設定します
これで実際にログインの問題は解決しましたが、アクセス許可レベルを 775 に戻した後、一部のユーザーは再びログインできましたが、すべてのユーザーは再ログインできなかったことに気付きました。
そこで、ログ ファイル/フォルダーにアクセス許可の問題があるのではないか、それがエラー ログが出力されない理由ではないかと考えました。
そこで、laravel.log ファイルをさらに調べてみました。ユーザー (ubuntu:ubuntu) のみが読み取ることができることがわかりました。そのグループを www-data
に変更することにしました。 リーリーこれは私にとって非常に役に立ちます。laravel でエラー ログを再び記録できるようになりました。
おおよそ次のようなエラーが表示されます。
リーリーそこで、ストレージ内のすべての権限を確認したところ、データフォルダーにはユーザーのみがアクセスできることがわかりました
www-data をデータ フォルダーのグループとして追加しました:
リーリーこれで、私の問題は解決しました! (注: chmod 権限は 775 に復元されました)