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
344

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).

fichier login.jsx

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

let réponse = wait login() appelle une méthode nommée login, qui se trouve dans le fichier api.js

fichier api.js

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

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.

(Pour référence uniquement, le code pour générer le jeton du sanctuaire) fichier api.php

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

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.

Cela se produit dans le fichier api.js lorsque nous essayons d'obtenir les détails de mon_utilisateur :

let my_user = JSON.stringify(attendez-moi(response.data.access_token));

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).

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粉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
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!