下面的代码在本地服务器上完美运行,但是当适应 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()
})
}
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消