Masalah dengan pengesahan tersuai merentas domain dalam go

WBOY
Lepaskan: 2024-02-11 23:18:09
ke hadapan
939 orang telah melayarinya

Masalah dengan pengesahan tersuai merentas domain dalam go

Dalam pembangunan bahasa Go, permintaan merentas domain adalah masalah biasa. Permintaan merentas domain merujuk kepada menghantar permintaan kepada pelayan di bawah nama domain yang berbeza melalui kod JavaScript dalam penyemak imbas. Disebabkan sekatan dasar asal penyemak imbas, permintaan merentas domain tidak dibenarkan secara lalai. Walau bagaimanapun, dalam sesetengah senario, kami mungkin perlu melakukan pengesahan tersuai dalam permintaan merentas domain untuk memastikan keselamatan dan ketepatan permintaan tersebut. Dalam artikel ini, editor PHP Xigua akan memperkenalkan kepada anda cara menyelesaikan masalah pengesahan tersuai merentas domain dalam bahasa Go, membantu anda menghadapi cabaran permintaan merentas domain dengan lebih baik.

Kandungan soalan

Saya cuba belajar pengesahan adat golang, tetapi saya menghadapi banyak masalah. Inilah kod yang saya cuba:

package main
import (
        "reflect"
        "github.com/go-playground/validator/v10"
        "fmt"
)
type TeamMember struct {
        Country string
        Age int
        DropShip bool `validate:"is_eligible"`
}
func CustomValidation(fl validator.FieldLevel) bool {
  /*
    if(DropShip == true) {
       httpresponse = curl https://3rd-party-api.com/?country=<Country>&age=<Age>
       return httpresponse.code == 200
    }
    return false
  */

  b := fl.Parent()
  fmt.Println(reflect.TypeOf(b))
  fmt.Println(reflect.ValueOf(b))
  c := reflect.ValueOf(b).Interface()
  fmt.Println(c.(TeamMember))
  fmt.Println("============")
  return true
}


func main() {
  var validate *validator.Validate
  validate = validator.New(validator.WithRequiredStructEnabled())
  _ = validate.RegisterValidation("is_eligible", CustomValidation)
  teammember := TeamMember{"Canada", 34, true}

  validate.Struct(teammember)
}
Salin selepas log masuk

Anda boleh melihat logik pengesahan yang saya cuba dalam komen kod...jika DropShip 字段为 true,那么我需要将 CountryAge menyerahkan kepada API lain untuk melihat sama ada ahli pasukan itu layak. < /p>

Masalahnya ialah saya cuba menggunakan senaman reflect 库来访问 TeamMember 结构中的 CountryAge 字段。 fmt.Println(c.(TeamMember)) dan program saya ranap.

Bolehkah seseorang memberi saya contoh cara mengakses medan Ahli Pasukan yang lain? Atau adakah kaedah pengesahan saya melanggar simpulan bahasa pengesahan dalam golang?

Penyelesaian

Dalam kes ini, lebih baik menggunakan pengesahan tahap struktur tersuai:

package main

import (
    "fmt"

    "github.com/go-playground/validator/v10"
)

type TeamMember struct {
    Country  string
    Age      int
    DropShip bool
}

func TeamMemberStructLevelValidation(sl validator.StructLevel) {
    teamMember := sl.Current().Interface().(TeamMember)

    if teamMember.DropShip {
        // submit the Country and Age to another API to see if this team member is eligible.
        if teamMember.Country == "Canada" && teamMember.Age == 34 {
            sl.ReportError(teamMember.Country, "country", "Country", "is_eligible", "")
            sl.ReportError(teamMember.Age, "age", "Age", "is_eligible", "")
        }
    }
}

func main() {
    validate := validator.New(validator.WithRequiredStructEnabled())
    validate.RegisterStructValidation(TeamMemberStructLevelValidation, TeamMember{})

    teamMember := TeamMember{"Canada", 34, true}
    err := validate.Struct(teamMember)

    fmt.Printf("%+v\n", err)
    // Output:
    //   Key: 'TeamMember.country' Error:Field validation for 'country' failed on the 'is_eligible' tag
    //   Key: 'TeamMember.age' Error:Field validation for 'age' failed on the 'is_eligible' tag
}
Salin selepas log masuk

Lihat juga contoh yang disediakan oleh pakej: https://www.php.cn/link/fe41bb826b6a3cd35fe36744936400b9.

Atas ialah kandungan terperinci Masalah dengan pengesahan tersuai merentas domain dalam go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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!