Problems with cross-domain custom verification in go

WBOY
Release: 2024-02-11 23:18:09
forward
938 people have browsed it

Problems with cross-domain custom verification in go

In Go language development, cross-domain requests are a common problem. Cross-domain requests refer to sending requests to servers under different domain names through JavaScript code in the browser. Due to browser origin policy restrictions, cross-domain requests are not allowed by default. However, in some scenarios, we may need to perform customized verification in cross-domain requests to ensure the security and accuracy of the request. In this article, PHP editor Xigua will introduce to you how to solve the problem of cross-domain custom verification in the Go language, helping you better cope with the challenges of cross-domain requests.

Question content

I'm trying to learn golang custom validation, but I'm having a lot of trouble. Here's the code I've been trying:

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)
}
Copy after login

You can see the validation logic I tried in the code comments... If the DropShip field is true, then I need to add Country and Age Submit to another API to see if the team member is eligible. < /p>

The problem is that I'm struggling to use the reflect library to access the Country and Age fields in the TeamMember structure. fmt.Println(c.(TeamMember)) Execute my program and it crashes.

Can someone give me an example of how to access other TeamMember fields? Or does my verification method violate the idiom of verification in golang?

Solution

In this case it is better to use custom structure level validation:

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
}
Copy after login

Also see the examples provided by the package: https://www.php.cn/link/fe41bb826b6a3cd35fe36744936400b9.

The above is the detailed content of Problems with cross-domain custom verification in go. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!