Oauth2 в Go с Martini - синтаксис ResponseWriter для Reddit

Я бил головой в течение двух дней, и я явно что-то пропустил. Я немного полезен для создания бэкэнда/сервера и надеюсь, что кто-то может указать мне в правильном направлении.

  • У меня есть настольное приложение (не Go), которое делает запрос OAuth2 от Reddit.
  • OAuth2 в моем приложении работает отлично, но поток не работает, когда Reddit попадает в URI перенаправления на моем собственном сервере.
  • Я предполагаю, что он ждет соответствующего результата ResponseWriter, и ни одна из моих десятков некомпетентных попыток не сработала.
  • URI перенаправления удаляет мой сервер и функцию обратного вызова (ниже), а затем ничего не делает.

Вопросы

  • Где я ошибаюсь?
  • Является ли переменным "t" мой код аутентификации, и я сделал (ака, вы шутер!)?
  • Могу ли я просто написать значение t для своего приложения, отличного от Google, и сделать это?
  • Или мне не хватает шага?
  • Примечание: код слегка упрощен.

Спасибо!

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. (Я люблю его и получаю отличные результаты, которые улучшают работу моего пользовательского интерфейса.)

Ответ 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!