CORS-Fehler in Golang vs. Gin nach der Umleitung

WBOY
Freigeben: 2024-02-09 20:21:33
nach vorne
400 Leute haben es durchsucht

重定向后 Golang 与 Gin 中的 CORS 错误

Der Herausgeber von PHP, Xiaoxin, wird Ihnen nach der Umleitung die CORS-Fehler in Golang und Gin vorstellen. CORS (Cross-Origin Resource Sharing) ist ein Mechanismus zur sicheren Datenübertragung zwischen verschiedenen Domänen. Allerdings ist das Auftreten von CORS-Fehlern ein häufiges Problem bei der Verwendung von Golang- und Gin-Frameworks. In diesem Artikel werden die Ursachen und Lösungen von CORS-Fehlern ausführlich erläutert, um Entwicklern zu helfen, dieses Problem besser zu verstehen und damit umzugehen. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel kann Ihnen nützliche Anleitungen und Lösungen bieten. Lassen Sie uns gemeinsam CORS-Fehler in Golang und Gin untersuchen!

Frageninhalt

Ich versuche, Google Oauth2 in einem in Go und Gin geschriebenen Webserver zu implementieren. Ich habe zwei neue Endpunkte mit den Namen /google/sign-in und /google/callback hinzugefügt. Der erste empfängt die Anfrage und leitet zur Google-Authentifizierungs-URL weiter und der zweite wird aufgerufen, nachdem der Benutzer ein gültiges Google-Konto ausgewählt, das Token überprüft und ein JWT für meine interne Authentifizierung erstellt hat.

Alles ist in Ordnung, aber das ist nicht der Fall, denn wenn ich die erste API-Route aufrufe, erhalte ich den Cors-Fehler:

access to xmlhttprequest at 'https://accounts.google.com/o/oauth2/auth?access_type=online&client_id=xxxxxxxxxxxxx-337ka657nqlo84q6697vv2efsc2vqvm0.apps.googleusercontent.com&redirect_uri=http%3a%2f%2flocalhost%3a3000%2fgoogle%2fcallback&response_type=code&scope=https%3a%2f%2fwww.googleapis.com%2fauth%2fuserinfo.email+https%3a%2f%2fwww.googleapis.com%2fauth%2fuserinfo.profile&state=7e5f86fe352b4563c7d1bd62408285dcbc44e3e26a4f142bbae915279008ece6' (redirected from 'http://localhost:3000/google/sign-in') from origin 'http://localhost:4200' has been blocked by cors policy: response to preflight request doesn't pass access control check: no 'access-control-allow-origin' header is present on the requested resource.
Nach dem Login kopieren

Das ist mein Golang-Code:

r := gin.default()

r.use(cors.new(cors.config{
    alloworigins: []string{"*"},
    allowmethods: []string{"get", "post", "put", "delete", "patch", "options"},
    allowheaders: []string{"origin", "authorization", "content-type", "content-length", "accept-encoding", "x-csrf-token", "baggage", "sentry-trace", "x-user-lang"},
}))

r.post("/google/sign-in", authcontroller.redirecttogoogleauthpage)
r.get("/google/callback", authcontroller.googlesignin)
Nach dem Login kopieren

Authentifizierungscontroller

func (a AuthController) RedirectToGoogleAuthPage(c *gin.Context) {
  googleAuthConfig := utils.GetGoogleAuthConfig()
  state := utils.GenerateRandomKey()
  url := googleAuthConfig.AuthCodeURL(state, oauth2.AccessTypeOnline)
  session := sessions.Default(c)
  session.Set(state, state)
  err := session.Save()
  if err != nil {
      c.JSON(http.StatusInternalServerError, a.Errors.InternalError(err.Error()))
      return
  }
  c.Header("X-Auth-State", state)
  c.Redirect(http.StatusTemporaryRedirect, url)
}
Nach dem Login kopieren

In googleauthconfig lautet die Rückruf-URL http://localhost:3000/google/callback und wird den Google Cloud-OAuth-Anmeldeinformationen hinzugefügt.

Ich weiß, dass mir in der Rückrufanfrage „access-control-allow-origin“ fehlt, aber wie füge ich diesen Header hinzu?

Lösung

Basierend auf den Informationen in der Frage besuchen Sie http://localhost:4200页面,并向http://localhost:3000/google/sign-in发送AJAX请求,该请求将重定向到https://accounts.google.com/o/oauth2/auth。这行不通。您需要将页面重定向到 https://accounts.google.com/o/oauth2/auth.

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

  • Ändern Sie den Client-Code, um AJAX-Anfragen durch Formularanfragen zu ersetzen (die Verwendung von <form action="http://localhost:3000/google/sign-in" method="POST"> 元素)。在这种情况下,RedirectToGoogleAuthPage 中的 c.JSON sollte durch etwas anderes ersetzt werden.

  • oder ändern RedirectToGoogleAuthPage 以使用包含要重定向到的目标 URL 的 JSON 内容进行响应,并修改客户端代码以将页面重定向到目标 URL(使用 window.location = targetURL).

Sieht so aus, als ob die zweite Option weniger Änderungen am Code erfordert.

Das obige ist der detaillierte Inhalt vonCORS-Fehler in Golang vs. Gin nach der Umleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!