facebook登录服务器端使用golang无法正常工作

Ano*_*use 4 facebook go

我正在尝试用facebook进行服务器端身份验证,我可以进入登录对话框和权限,但重定向后我没有在重定向处理程序中获得auth'代码'.有什么建议吗?

FBCfg = &oauth.Config { //setup
    ClientId: appId, ClientSecret: appSecret,
    AuthURL: "https://www.facebook.com/dialog/oauth",
    TokenURL: "https://graph.facebook.com/oauth/access_token",
    RedirectURL: "http://"+domain+"/fedlogin/facebook/redir",
    Scope: "",
}

func FBHandleAuth(w http.ResponseWriter, r *http.Request) {
    url := FBCfg.AuthCodeURL("")
    http.Redirect(w, r, url, http.StatusFound)
}

func FBHandleRedir(w http.ResponseWriter, r *http.Request) {
    code := r.FormValue("code")
    w.Write([]byte(code)) //<-- empty, no code returned.
}
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用原始的goauth2最新版本.

Ric*_*her 6

我也花了一些时间在这上面.我不知道我最近相当愚蠢的问题中的样本是否对你有用,但链接只是为了以防万一.

你会注意到我的不使用goauth2.您可能会或可能不会意识到'股票'goauth2在Facebook的OAuth2实现方面效果不佳(我认为这是20草案而不是现行标准.)相反,你可以使用goauth2的这个分支来做出限制Facebook在某些地方使用URL查询字符串格式而不是JSON.

不幸的是,如果你正在使用App Engine,还有另一个问题:你不能使用任何依赖于DefaultClient的东西,因为App Engine要求你使用他们的urlfetch服务创建客户端.我不清楚你是否正在为App Engine编写代码,这对你来说可能不是问题.

你可能应该检查一下你是否收到了任何返回的查询字符串.如果您手动测试会发生什么,例如,使用https://graph.facebook.com/oauth/authorize?client_id=123456789&redirect_uri=http://youruri/&state=somestate?你得到代码响应吗?这将帮助您获取任何错误,这些错误不会以查询字符串格式返回,因此您可能不会注意到它们......它们是JSON响应:

{
   "error": {
      "message": "Error validating application. Invalid application ID.",
      "type": "OAuthException",
      "code": 101
   }
}
Run Code Online (Sandbox Code Playgroud)

总结如下:

  1. 确保你不会期望vanilla goauth2能够处理Facebook OAuth2响应,因为它还没有.
  2. 如果您正在使用App Engine,请通过urlfetch.Client()创建任何http客户端.
  3. 在go代码之外尝试您的身份验证请求.
  4. 作为事后的想法,请确保您的处理程序通过检查r.URL中的内容来接收包括查询字符串在内的整个URL.

编辑:截至12月16日我错了第1点:goauth2已更新以处理Facebook.