【问题标题】:Gorrila session filesystemstore cannot find session file大猩猩会话文件系统存储找不到会话文件
【发布时间】: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


    【解决方案1】:

    我自己找出答案

    原来我在初始化 gorilla session filesystemstore 时更改了我的密钥,但我并没有删除我在 chrome 中的 cookie 文件,所以它找不到所需的 tmp sesiion 文件。
    我更改了密钥,然后删除了相应的cookie文件,现在一切正常。

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多