Mon application Laravel + GatsbyJS utilise auth:sanctum pour la gestion des connexions, d'autres utilisateurs reçoivent des erreurs du serveur 500, mais ma connexion fonctionne correctement
P粉215292716
P粉215292716 2023-09-04 09:08:41
0
1
578
<p>J'ai donc une application (utilisant Laravel pour le backend et GatsbyJS pour le frontend) que j'aide à développer. Il y a un mois, tous les utilisateurs pouvaient se connecter sans problème. Mais j'ai découvert que désormais, tous les utilisateurs ne peuvent pas se connecter à l'environnement de production (sauf moi). </p> <p>fichier login.jsx</p> <pre class="brush:php;toolbar:false;">const formChanged = async (e) => setError(faux); e.preventDefault(); setSubmitting(true); laissez loginData = getValues(); let réponse = attendre la connexion (loginData.email, loginData.password); setSubmitting(faux); si (réponse.erreur) { setErreur(vrai); setValue('mot de passe', ''); } autre { naviguer('/app/idm/'); } };</pré> <p>let réponse = wait login() appelle une méthode nommée login, qui se trouve dans le fichier api.js</p> <p>fichier api.js</p> <pre class="brush:php;toolbar:false;">// Connectez-vous à l'application export const login = async (email, mot de passe) => // envoyer une demande let réponse = wait makeRequest('post', '/login', { email, mot de passe }); // S'il n'y a pas d'erreur, définissez le jeton et l'utilisateur if (!response.error && isBrowser()) { localStorage.setItem('idm_token', réponse.data.access_token); let my_user = JSON.stringify(attendez-moi(response.data.access_token)); localStorage.setItem('idm_user', mon_user); } réponse de retour ; };</pré> <p>Lorsque nous transmettons l'e-mail et le mot de passe, ces données sont vérifiées et à ce stade, tous les utilisateurs peuvent générer des jetons sans problème. </p> <p> (Pour référence uniquement, le code pour générer le jeton du sanctuaire) fichier api.php</p> <pre class="brush:php;toolbar:false;">Route::post('/login', function(Request $request) { $login = $request->only('email', 'mot de passe'); if (Auth::attempt($login)) { $user = Utilisateur::where('email', $request['email'])->firstOrFail(); $token = $user->createToken('auth_token')->plainTextToken; retourner la réponse()->json([ 'access_token' => $jeton, 'token_type' => 'Porteur' ]); } return réponse()->json(["message" => "Échec de l'authentification"], 401); })->name('api.login');</pre> <p>Le problème semble être lié à l'accès aux routes actuellement protégées par auth:sanctum. Encore une fois, tous les utilisateurs sont capables de générer des jetons, mais seules mes informations de connexion me permettent d'accéder à l'itinéraire. Tous les autres utilisateurs recevront une erreur de serveur 500.</p> <p>Cela se produit dans le fichier api.js lorsque nous essayons d'obtenir les détails de mon_utilisateur : </p> <pre class="brush:php;toolbar:false;">let my_user = JSON.stringify(attendez-moi(response.data.access_token));</pre> <p>Un autre problème que je rencontre est que mon application Laravel en production a cessé de générer des erreurs il y a quelques mois et je n'arrive pas à comprendre comment résoudre le problème de journalisation des erreurs en production (en développement, la journalisation des erreurs est OK). </p> <p>Désolé pour le manque de détails, je suis très nouveau dans tout cela et s'il y a des conseils ou des choses à essayer, je l'apprécierais vraiment, même si je n'obtiens pas de réponse, je suis plus que prêt à travailler sur l’apprentissage et la résolution de cette question. </p>
P粉215292716
P粉215292716

répondre à tous(1)
P粉734486718

Pour résoudre davantage le problème, j'ai décidé d'examiner pourquoi je ne recevais pas les journaux d'erreurs.

J'ai décidé de chmod 777 le dossier de stockage et son contenu

chmod -R 777 storage/

Ajoutez -R pour définir de manière récursive le contenu sur 777

Cela a en fait résolu mon problème de connexion, mais j'ai remarqué qu'après avoir restauré le niveau d'autorisation à 775, certains utilisateurs ont pu se reconnecter, mais pas tous.

Ensuite, j'ai pensé : j'ai peut-être un problème d'autorisation avec mon fichier/dossier journal et c'est peut-être pour cela que je n'imprime pas le journal des erreurs ?

J'ai donc examiné plus en détail mon fichier laravel.log. Il s'avère qu'il ne peut être lu que par l'utilisateur (ubuntu : ubuntu). J'ai décidé de changer son groupe en www-data

chown ubuntu:www-data laravel.log

Cela m'est très utile, je peux à nouveau enregistrer les erreurs dans Laravel !

Maintenant, je vois mon erreur, à peu près comme suit :

production.ERROR: Unable to create lockable file: /var/www/main/backend/storage/framework/cache/data/d5/........etc...etcc

J'ai donc vérifié toutes les autorisations sous stockage et constaté que mon dossier de données n'est accessible que par l'utilisateur

J'ai ajouté www-data en tant que groupe au dossier data :

chown ubuntu:www-data data

Maintenant, mon problème est résolu ! (Remarque : mes autorisations chmod ont été restaurées à 775)

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal