当前位置: > > > > 如何使用Go函数验证Netlify身份
如何使用Go函数验证Netlify身份
来源:stackoverflow
2024-04-26 21:48:34
0浏览
收藏
今天米云给大家带来了《如何使用Go函数验证Netlify身份》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~
问题内容
在 Netlify 函数的文档中,它们展示了如何使用 Node 来识别请求是否来自登录用户。
https://www.netlify.com/docs/functions/#identity-and-functions
查看 Go 结构体的上下文,用户数据似乎在 Go 中不可用。我肯定错过了什么。如何使用 Netlify 中的 Go Lamda 函数验证用户并从 JWT 获取他们的信息?
解决方案
查看此帖子:
type Bearer struct {
Identity *Identity `json:"identity"`
User *User `json:"user"`
SiteUrl string `json:"site_url"`
Alg string `json:"alg"`
}
type Identity struct {
URL string `json:"url"`
Token string `json:"token"`
}
type User struct {
AppMetaData *AppMetaData `json:"app_metadata"`
Email string `json:"email"`
Exp int `json:"exp"`
Sub string `json:"sub"`
UserMetadata *UserMetadata `json:"user_metadata"`
}
type AppMetaData struct {
Provider string `json:"provider"`
}
type UserMetadata struct {
FullName string `json:"full_name"`
}
func AuthMiddleware(h *Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
lc, ok := lambdacontext.FromContext(r.Context())
if !ok {
err := errors.New("server error")
h.logger.Errorf("error retrieving context %+v", r.Context())
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
bearer := lc.ClientContext.Custom["netlify"]
raw, err := base64.StdEncoding.DecodeString(bearer)
if err != nil {
h.logger.Error(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
data := Bearer{}
err = json.Unmarshal(raw, &data)
if err != nil {
h.logger.Error(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if data.User == nil {
err := errors.New("forbidden")
h.logger.Errorf("Unauthenticated request bearer: %+v", bearer)
http.Error(w, err.Error(), http.StatusForbidden)
return
}
h.ServeHTTP(w, r)
})
}
还有一个博客:了解更多详情
今天关于《如何使用Go函数验证Netlify身份》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注米云公众号!
