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

时间:2013-11-24 18:57:53

标签: 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?
}

参考点

其它

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

2 个答案:

答案 0 :(得分: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!

答案 1 :(得分:1)

查看an OAuth2 implementation.

的martini-contrib页面