2014-12-13 2 views
4

Код ниже отлично работает на локальном сервере, но при адаптации к движку Google для приложений (func main изменен на init и имя пакета устанавливается из основного приложения для тестирования) oauth2callback-запрос не работает больше, ниже запрос перенаправляется на обработчик oauth2error.Martini oauth2callback перенаправляет на oauth2error после адаптации к GAE

http://testapp.com/oauth2callback?code=OAUTHRESPONSEFROMFACEBOOK&state=%2F

package testapp 

import (
    "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) 
} 
+0

ли вы изменили настройки приложения facebook для нового домена? –

+0

Да, я изменил настройки Facebook. – denizeren

ответ

0

Я думаю, что вам нужно, чтобы придать App Engine контекст в Получ.

По this issue на Go Martini репо, вы можете сделать следующим образом:

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() 
    }) 
} 
Смежные вопросы