Go with Martini中的Oauth2 - Reddit的ResponseWriter语法

Geo*_*rey 10 oauth go

我一直在敲打我的头两天,显然遗漏了一些东西.我对后端/服务器开发有一点想法,希望有人能指出我正确的方向.

  • 我有一个桌面应用程序(不是Go),它从Reddit发出OAuth2请求.
  • 我的应用程序中的OAuth2工作正常,但是当Reddit在我自己的服务器上点击重定向URI时,流程会失败.
  • 我猜它正在等待正确的ResponseWriter结果,并且我的十几个不称职的尝试都没有奏效.
  • 重定向URI命中我的服务器和回调函数(下面),然后什么都不做.

问题

  • 我哪里错了?
  • 变量"t"我的授权代码,我完成了(又名,你是一个小丑!)?
  • 我可以将t的值写入我的非Go应用程序并完成吗?
  • 或者我错过了一步?
  • 注意:代码略有简化.

谢谢!

package main

import (
    "code.google.com/p/goauth2/oauth"
    "fmt"
    "github.com/codegangsta/martini"
    "io"
    "net/http"
)

var config = &oauth.Config{
    ClientId:     CLIENT_ID,
    ClientSecret: CLIENT_SECRET,
    Scope:        "identify",
    AuthURL:      "https://ssl.reddit.com/api/v1/authorize",
    TokenURL:     "https://ssl.reddit.com/api/v1/access_token",
    RedirectURL:  "http://localhost:3000/reddit_oauth",
}

func main() {
    m := martini.Classic()
    m.Get("/reddit_oauth", handleCallback)
    m.Run()
}

func handleCallback(w http.ResponseWriter, r *http.Request) {
    //Get the code from the response
    code := r.FormValue("code")

    // Exchange the received code for a token
    t := &oauth.Transport{Config: config}
    t.Exchange(code)

    // Am I done?
}
Run Code Online (Sandbox Code Playgroud)

参考点

杂项

  • 为何选择马提尼?它看起来很血腥.
  • 为什么不只是Oauth2?因为我无知.
  • 为什么不用PHP/Python?因为,来吧!我正在努力学习Go.(我很喜欢它,并获得了一些很好的结果,可以增强我的UI工作.)

Geo*_*rey 1

好的,答案主要位于我的客户端应用程序中(同样,不是 Go),它的 OAuth2 请求中缺少一些方面。(还需要付出一些努力才能使标头针对不同的请求正确。)

我发现的 Reddit OAuth2 流程的最佳信息在这里:http://www.reddit.com/r/redditdev/comments/197x36/using_oauth_to_send_valid_requests/

来自 Reddit 的回复仍然向我询问 ClientID 和 ClientSecret,我确信可以通过适当的 ResponseWriter 来提供这些信息,尽管目前我只是简单地复制/粘贴到弹出窗口中,这样我就可以专注于其他事情!

当我解决这个问题时,我会添加这个答案。

如果有人有兴趣了解更多信息,请随时询问。

再次感谢 TomWilde 和 Elithrar!