猿问

连接到 Go Gin 时的 Angular 8 CORS

我用 Golang 的Gin 框架和JWT 中间件构建了一个后端。这是我使用的自述文件中的官方示例:


main.go


package main


import (

    "log"

    "net/http"

    "os"

    "time"


    "github.com/appleboy/gin-jwt/v2"

    "github.com/gin-gonic/gin"

)


type login struct {

    Username string `form:"username" json:"username" binding:"required"`

    Password string `form:"password" json:"password" binding:"required"`

}


var identityKey = "id"


func helloHandler(c *gin.Context) {

    claims := jwt.ExtractClaims(c)

    user, _ := c.Get(identityKey)

    c.JSON(200, gin.H{

        "userID":   claims[identityKey],

        "userName": user.(*User).UserName,

        "text":     "Hello World.",

    })

}


// User demo

type User struct {

    UserName  string

    FirstName string

    LastName  string

}


func main() {

    port := os.Getenv("PORT")

    r := gin.New()

    r.Use(gin.Logger())

    r.Use(gin.Recovery())


    if port == "" {

        port = "8000"

    }


    // the jwt middleware

    authMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{

        Realm:       "test zone",

        Key:         []byte("secret key"),

        Timeout:     time.Hour,

        MaxRefresh:  time.Hour,

        IdentityKey: identityKey,

        PayloadFunc: func(data interface{}) jwt.MapClaims {

            if v, ok := data.(*User); ok {

                return jwt.MapClaims{

                    identityKey: v.UserName,

                }

            }

            return jwt.MapClaims{}

        },

        IdentityHandler: func(c *gin.Context) interface{} {

            claims := jwt.ExtractClaims(c)

            return &User{

                UserName: claims[identityKey].(string),

            }

我 Angular 8 中的身份验证服务如下所示:


但这在 Chrome 中给了我一条错误消息:


Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/login' from origin 'http://localhost:4200' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

不过,在控制台中,Gin 返回状态码 204。


我重新启动了ng serve,但仍然出现错误(我根据代理文件中的配置将auth.service和main.go中的url改为/api/login)。


我在这里做错了什么?


杨__羊羊
浏览 215回答 1
1回答

胡说叔叔

更改AllowHeaders: []string{"Origin"}为AllowHeaders: []string{"content-type"};
随时随地看视频慕课网APP

相关分类

Go
我要回答