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

それで、開発を手伝っているアプリ (バックエンドに laravel、フロントエンドに GatsbyJS を使用) があります。 1 か月前、すべてのユーザーが問題なくログインできました。しかし、現在、すべてのユーザーが本番環境にログインできないことがわかりました (私を除く)。

login.jsx ファイル

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/'); } };

let response = await login() は、api.js ファイル

にある login という名前のメソッドを呼び出します。

api.js ファイル

// アプリケーションにログインします エクスポート 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); } 応答を返します。 };

電子メールとパスワードを渡すと、このデータが検証され、この時点ですべてのユーザーが問題なくトークンを生成できます。

(参考のみ、Sanctum トークンを生成するコード) api.php ファイル

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');

問題は、現在 auth:sanctum によって保護されているルートにアクセスしているようです。繰り返しますが、すべてのユーザーがトークンを生成できますが、ルートにアクセスできるのは私のログイン詳細のみです。 他のすべてのユーザーはサーバー 500 エラーを受け取ります。

これは、my_user の詳細を取得しようとすると、api.js ファイルで発生します。

let my_user = JSON.stringify(await me(response.data.access_token));

私が抱えているもう1つの問題は、本番環境のlaravelアプリケーションが数か月前にエラーの出力を停止し、本番環境でのエラーログの問題を修正する方法がわからないことです(開発中はエラーログは問題ありません)。

詳細が足りず申し訳ありませんが、私はこのようなことにはまったく慣れていないので、何かヒントや試してみるべきことがあれば、本当に感謝します。たとえ答えが得られなかったとしても、私は以上のことを考えています。この質問を学び、解決することに喜んで取り組みます。

P粉215292716
P粉215292716

全員に返信 (1)
P粉734486718

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

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

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

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

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

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

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

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

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

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

リーリー

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

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

リーリー

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

いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!