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.
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
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
Cela m'est très utile, je peux à nouveau enregistrer les erreurs dans Laravel !
Maintenant, je vois mon erreur, à peu près comme suit :
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 :
Maintenant, mon problème est résolu ! (Remarque : mes autorisations chmod ont été restaurées à 775)