Heim  >  Fragen und Antworten  >  Hauptteil

Laravel Sanctum kann im Frontend nicht zum Generieren eines CSRF-Cookies verwendet werden

<p>Kürzlich habe ich versucht, Laravel Sanctum für die Authentifizierung in Nuxt 3 zu verwenden, bin aber beim ersten CSRF-Cookie-Handshake auf Probleme gestoßen. Das Problem ist, dass das XSRF-TOKEN-Cookie vom Browser nicht gesetzt wird, nachdem ich eine Anfrage an den Pfad <code>http://localhost:8000/sanctum/csrf-cookie</code> gestellt habe. Ich hänge nun schon seit einer Woche an diesem Problem fest und habe im Internet keine Lösung gefunden. Ich habe erfolglos versucht, mit Axios und der Fetch-API das XSRF-TOKEN festzulegen. Ich verwende <code>http://localhost:8000</code> im Backend und <code>http://localhost:3000</code> Laravel Sanctum selbst funktioniert einwandfrei, denn beim Testen auf Postman erhalte ich den Set-Cookie-Header, aber nicht den Browser. Ich habe die folgenden Eigenschaften in der Datei <code>.env</code> festgelegt: </p> <pre class="brush:php;toolbar:false;">FRONTEND_URL=http://localhost:3000 SESSION_DOMAIN=localhost:3000 SESSION_DRIVER=cookie</pre> <p>Ich habe alle Anstrengungen unternommen, um die Einschränkungen von CORS-Anfragen im Frontend zu überwinden. Meine Abruffunktion sieht so aus: </p> <pre class="brush:php;toolbar:false;">window.fetch('http://localhost:8000/sanctum/csrf-cookie', { Anmeldeinformationen: 'einschließen', }).then((response) => { console.log(…response.headers) })</pre> <p>Ich habe gelesen, dass das Setzen der Anmeldeinformationen auf „include“ das Problem lösen kann, aber selbst damit kann ich das XSRF-TOKEN immer noch nicht festlegen. Ich habe versucht, die Anmeldeinformationen auf „Same-Origin“ zu setzen, aber das hat auch nicht funktioniert. Weiß jemand, wie man dieses Problem löst? </p>
P粉099985373P粉099985373421 Tage vor573

Antworte allen(1)Ich werde antworten

  • P粉002546490

    P粉0025464902023-08-27 10:38:36

    问题是浏览器不会接受来自不同端口的cookie。

    由于您的后端运行在8000端口,前端运行在3000端口,后端提供的cookie将无法设置在前端上。

    因此,一个解决方法是仅为API端点禁用CSRF保护。 您可以在VerifyCsrfToken中间件中进行此操作。

    将此行添加到您的$except数组中,然后您就可以继续了。

    Antwort
    0
  • StornierenAntwort