【发布时间】:2019-12-13 13:00:39
【问题描述】:
我开始使用 golang 和 Angular2 构建一个常规的 Web 应用程序,最重要的是我试图在 auth0.com 的帮助下保护我的登录。我从here 下载了快速入门代码并尝试运行该代码,它运行了一段时间,然后下次运行它时,找不到 /tmp/session 文件了。
以下是 auth0.com 提供的代码的一些基本概念。
1.初始化 gorilla 会话文件系统存储
2.然后开始认证过程
下面提供代码
app.go
var (
Store *sessions.FilesystemStore
)
func Init() error {
Store = sessions.NewFilesystemStore("", []byte("something-very-secret"))
gob.Register(map[string]interface{}{})
return nil
}
login.go
func LoginHandler(w http.ResponseWriter, r *http.Request) {
domain := os.Getenv("AUTH0_DOMAIN")
aud := os.Getenv("AUTH0_AUDIENCE")
conf := &oauth2.Config{
ClientID: os.Getenv("AUTH0_CLIENT_ID"),
ClientSecret: os.Getenv("AUTH0_CLIENT_SECRET"),
RedirectURL: os.Getenv("AUTH0_CALLBACK_URL"),
Scopes: []string{"openid", "profile"},
Endpoint: oauth2.Endpoint{
AuthURL: "https://" + domain + "/authorize",
TokenURL: "https://" + domain + "/oauth/token",
},
}
if aud == "" {
aud = "https://" + domain + "/userinfo"
}
// Generate random state
b := make([]byte, 32)
rand.Read(b)
state := base64.StdEncoding.EncodeToString(b)
session, err := app.Store.Get(r, "state")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
session.Values["state"] = state
err = session.Save(r, w)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
audience := oauth2.SetAuthURLParam("audience", aud)
url := conf.AuthCodeURL(state, audience)
http.Redirect(w, r, url, http.StatusTemporaryRedirect)
}
错误日志是
打开 /tmp/session_46CNLLHBKD... : 没有这样的文件或目录
我尝试理解代码并发现错误日志来自 login.go 第 39 行(session, err := app.Store.Get(r, "state"))。我开始追踪代码并找出答案。
login.go:39 -->store.go:180-->session.go:132-->store.go:186--> store.go:272
你可以在这里找到store.go 和session.go。
错误日志来自这一行:fdata, err := ioutil.ReadFile(filename)
在整个过程中,我没有发现任何保存会话文件的函数调用。
我不明白这个错误,我不知道为什么我可以在一开始就运行代码,请帮助我解决这个问题。
您的任何建议将不胜感激。非常感谢。
【问题讨论】:
标签: session go web-applications oauth-2.0 gorilla