私のLaravel + GatsbyJSアプリはログイン管理にauth:sanctumを使用しています。他のユーザーはサーバー500エラーを受け取りますが、私のログインは正常に機能しています
P粉215292716
P粉215292716 2023-09-04 09:08:41
0
1
589
<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>
P粉215292716
P粉215292716

全員に返信(1)
P粉734486718

問題をさらにトラブルシューティングするために、エラー ログを受信しない理由を調べることにしました。

ストレージフォルダーとその内容をchmod 777

に設定することにしました。 リーリー

-R を追加してコンテンツを再帰的に 777 に設定します

これで実際にログインの問題は解決しましたが、アクセス許可レベルを 775 に戻した後、一部のユーザーは再びログインできましたが、すべてのユーザーは再ログインできなかったことに気付きました。

そこで、ログ ファイル/フォルダーにアクセス許可の問題があるのではないか、それがエラー ログが出力されない理由ではないかと考えました。

そこで、laravel.log ファイルをさらに調べてみました。ユーザー (ubuntu:ubuntu) のみが読み取ることができることがわかりました。そのグループを www-data

に変更することにしました。 リーリー

これは私にとって非常に役に立ちます。laravel でエラー ログを再び記録できるようになりました。

おおよそ次のようなエラーが表示されます。

リーリー

そこで、ストレージ内のすべての権限を確認したところ、データフォルダーにはユーザーのみがアクセスできることがわかりました

www-data をデータ フォルダーのグループとして追加しました:

リーリー

これで、私の問題は解決しました! (注: chmod 権限は 775 に復元されました)

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート