Heim  >  Artikel  >  Backend-Entwicklung  >  CORS-Fehler in Golang vs. Gin nach der Umleitung

CORS-Fehler in Golang vs. Gin nach der Umleitung

WBOY
WBOYnach vorne
2024-02-09 20:21:33402Durchsuche

重定向后 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.

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)

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

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 fb324f3cd639ff766e289eb63d17f9b3 元素)。在这种情况下,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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen