Meine Laravel + GatsbyJS-App verwendet auth:sanctum für die Anmeldeverwaltung. Andere Benutzer erhalten Server 500-Fehler, aber meine Anmeldung funktioniert einwandfrei
P粉215292716
P粉215292716 2023-09-04 09:08:41
0
1
574
<p>Ich habe also eine App (mit Laravel für das Backend und GatsbyJS für das Frontend), bei deren Entwicklung ich mithelfe. Vor einem Monat konnten sich alle Benutzer problemlos anmelden. Aber ich habe festgestellt, dass sich jetzt nicht alle Benutzer (außer mir) in der Produktionsumgebung anmelden können. </p> <p>login.jsx-Datei</p> <pre class="brush:php;toolbar:false;">const formChanged = async (e) => setError(false); e.preventDefault(); setSubmitting(true); let loginData = getValues(); let Response = Warten auf Login(loginData.email, loginData.password); setSubmitting(false); if (response.error) { setError(true); setValue('password', ''); } anders { navigieren('/app/idm/'); } };</pre> <p>let Response =await login() ruft eine Methode namens login auf, die sich in der Datei api.js befindet</p> <p>api.js-Datei</p> <pre class="brush:php;toolbar:false;">// Melden Sie sich bei der Anwendung an export const login = async (E-Mail, Passwort) => // Anfrage senden let Response = waiting makeRequest('post', '/login', { email, password }); // Wenn keine Fehler vorliegen, legen Sie das Token und den Benutzer fest 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); } Rückantwort; };</pre> <p>Wenn wir die E-Mail-Adresse und das Passwort weitergeben, werden diese Daten überprüft und an diesem Punkt können alle Benutzer problemlos Token generieren. </p> <p> (Nur als Referenz, der Code zum Generieren des Sanctum-Tokens) api.php-Datei</p> <pre class="brush:php;toolbar:false;">Route::post('/login', function(Request $request) { $login = $request->only('email', 'password'); if (Auth::attempt($login)) { $user = User::where('email', $request['email'])->firstOrFail(); $token = $user->createToken('auth_token')->plainTextToken; return Response()->json([ 'access_token' => 'token_type' => 'Bearer' ]); } return Response()->json(["message" => "Authentifizierung fehlgeschlagen"], 401); })->name('api.login');</pre> <p>Das Problem scheint beim Zugriff auf Routen zu bestehen, die derzeit durch auth:sanctum geschützt sind. Auch hier können alle Benutzer Token generieren, aber nur meine Anmeldedaten ermöglichen mir den Zugriff auf die Route. Alle anderen Benutzer erhalten einen Server-500-Fehler.</p> <p>Dies geschieht in der Datei api.js, wenn wir versuchen, my_user-Details abzurufen: </p> <pre class="brush:php;toolbar:false;">let my_user = JSON.stringify(await me(response.data.access_token));</pre> <p>Ein weiteres Problem, das ich habe, ist, dass meine Laravel-Anwendung in der Produktion vor ein paar Monaten aufgehört hat, Fehler auszugeben, und ich nicht herausfinden kann, wie ich das Fehlerprotokollierungsproblem in der Produktion beheben kann (in der Entwicklung ist die Fehlerprotokollierung in Ordnung). </p> <p>Entschuldigung für den Mangel an Details, ich bin in all dem noch sehr neu und wenn es irgendwelche Tipps oder Dinge zum Ausprobieren gibt, wäre ich wirklich dankbar, auch wenn ich nicht die Antwort bekomme, die ich mehr als habe bereit, daran zu arbeiten, diese Frage zu lernen und zu lösen. </p>
P粉215292716
P粉215292716

Antworte allen(1)
P粉734486718

为了进一步排查问题,我决定查看为什么我没有收到错误日志。

我决定将存储文件夹及其内容设置为chmod 777

chmod -R 777 storage/

添加-R以递归地将内容设置为777

这实际上解决了我的登录问题,但我注意到将权限级别恢复为775后,一些用户能够再次登录,但并非所有用户。

然后我想,也许我的日志文件/文件夹存在权限问题,也许这就是为什么我没有打印出错误日志的原因?

所以我进一步研究了我的laravel.log文件。结果发现它只能由用户(ubuntu:ubuntu)读取。我决定将其组更改为www-data

chown ubuntu:www-data laravel.log

这对我非常有帮助,我又能够在laravel中记录错误日志了!

现在我看到了我的错误,大致如下:

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

所以我检查了存储下的每个权限,发现我的data文件夹只能由用户访问

我将www-data添加为data文件夹的组:

chown ubuntu:www-data data

现在,我的问题已解决!(注意:我的chmod权限已恢复为775)

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage