为了账号安全,请及时绑定邮箱和手机立即绑定

Martini oauth2callback 适配GAE后重定向到oauth2error

Martini oauth2callback 适配GAE后重定向到oauth2error

Go
料青山看我应如是 2021-09-10 09:51:53
下面的代码在本地服务器上完美运行,但是当适应 Google 应用引擎时(func main 更改为 init 并且包名称从 main 设置为测试应用程序)oauth2callback 请求不再工作,下面的请求被重定向到 oauth2error 处理程序。http://testapp.com/oauth2callback?code=OAUTHRESPONSEFROMFACEBOOK&state=%2Fpackage testappimport (    "github.com/go-martini/martini"    goauth2 "github.com/golang/oauth2"    "github.com/martini-contrib/oauth2"    "github.com/martini-contrib/sessions"    "net/http")func init() {    m := martini.Classic()    m.Use(sessions.Sessions("my_session", sessions.NewCookieStore([]byte("secret123"))))    m.Use(oauth2.Facebook(        goauth2.Client("AppID", "AppSecret"),        goauth2.RedirectURL("http://testapp.com/oauth2callback"),        goauth2.Scope("email,user_birthday,user_friends,publish_actions,user_location,user_photos"),    ))    // Tokens are injected to the handlers    m.Get("/", func(tokens oauth2.Tokens) string {        if tokens.Expired() {            return "not logged in, or the access token is expired"        }        return "logged in"    })    // Routes that require a logged in user    // can be protected with oauth2.LoginRequired handler.    // If the user is not authenticated, they will be    // redirected to the login path.    m.Get("/restrict", oauth2.LoginRequired, func(tokens oauth2.Tokens) string {        return tokens.Access()    })    http.Handle("/", m)}
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我的猜测是您需要将 App Engine 上下文注入 Get 方法。


根据Go Martini repo 上的这个问题,您可以执行以下操作:


func AppEngine(m martini.Context, r *http.Request) {

    m.MapTo(appengine.NewContext(r), (*appengine.Context)(nil))

}


func init() {

    m := martini.Classic()

    m.Use(AppEngine)


    // ...


    m.Get("/", func(tokens oauth2.Tokens, c appengine.Context) string {

        if tokens.Expired() {

            return "not logged in, or the access token is expired"

        }

        return "logged in"

    })


    m.Get("/restrict", oauth2.LoginRequired, func(tokens oauth2.Tokens, c appengine.Context) string {

        return tokens.Access()

    })

}


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信