Ralat CORS dalam Golang lwn Gin selepas ubah hala

WBOY
Lepaskan: 2024-02-09 20:21:33
ke hadapan
399 orang telah melayarinya

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

Editor php, Xiaoxin, akan memperkenalkan kepada anda ralat CORS dalam Golang dan Gin selepas ubah hala. CORS (Cross-Origin Resource Sharing) ialah mekanisme untuk pemindahan data selamat antara domain yang berbeza, namun, menghadapi ralat CORS adalah masalah biasa apabila menggunakan rangka kerja Golang dan Gin. Artikel ini akan menerangkan secara terperinci punca dan penyelesaian ralat CORS untuk membantu pembangun lebih memahami dan menangani masalah ini. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini boleh memberi anda panduan dan penyelesaian yang berguna. Mari kita terokai ralat CORS dalam Golang dan Gin bersama-sama!

Kandungan soalan

Saya cuba melaksanakan google oauth2 dalam pelayan web yang ditulis dalam go dan gin. Saya menambahkan dua titik akhir baharu bernama /google/log masuk dan /google/callback. Yang pertama menerima permintaan dan mengubah hala ke url auth google dan yang kedua dipanggil selepas pengguna memilih akaun google yang sah, mengesahkan token dan mencipta jwt untuk pengesahan dalaman saya.

Semuanya baik-baik saja, tetapi tidak demikian kerana apabila saya memanggil laluan api pertama saya mendapat ralat cors:

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.
Salin selepas log masuk

Ini kod golang saya:

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)
Salin selepas log masuk

Pengawal Pengesahan

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)
}
Salin selepas log masuk

Dalam googleauthconfig, url panggil balik ialah http://localhost:3000/google/callback, yang ditambahkan pada bukti kelayakan oauth google cloud.

Saya tahu saya kehilangan access-control-allow-origin dalam permintaan panggil balik, tetapi bagaimana cara saya menambah pengepala itu?

Penyelesaian

Berdasarkan maklumat dalam soalan, anda sedang melawat http://localhost:4200页面,并向http://localhost:3000/google/sign-in发送AJAX请求,该请求将重定向到https://accounts.google.com/o/oauth2/auth。这行不通。您需要将页面重定向到 https://accounts.google.com/o/oauth2/auth.

Ada dua pilihan untuk menyelesaikan masalah ini:

  • Ubah suai kod pelanggan untuk menggantikan permintaan AJAX dengan permintaan borang (menggunakan <form action="http://localhost:3000/google/sign-in" method="POST"> 元素)。在这种情况下,RedirectToGoogleAuthPage 中的 c.JSON harus diganti dengan yang lain.

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

Nampaknya pilihan kedua memerlukan kurang perubahan pada kod.

Atas ialah kandungan terperinci Ralat CORS dalam Golang lwn Gin selepas ubah hala. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!