2013-11-24 11 views
10

Ho sbattuto la testa per due giorni e mi manca chiaramente qualcosa. Sono un po 'doofus sullo sviluppo backend/server e spero che qualcuno possa indicarmi la giusta direzione.Oauth2 in Go con Martini - Sintassi ResponseWriter per Reddit

  • Ho un'applicazione desktop (non Go) che effettua una richiesta OAuth2 da Reddit.
  • OAuth2 nella mia applicazione funziona correttamente, tuttavia il flusso non riesce quando Reddit colpisce l'URI di reindirizzamento sul mio server.
  • Immagino che stia aspettando il giusto risultato di ResponseWriter e che nessuno dei miei tentativi incompetenti abbia funzionato.
  • L'URI di reindirizzamento colpisce il mio server e la funzione di callback (sotto) non fa nulla.

Domande

  • Dove sto andando male?
  • È variabile "t" il mio codice di autenticazione e ho fatto (aka, sei un buffone!)?
  • Posso solo scrivere il valore di t per la mia app non Go ed essere fatto?
  • O mi manca un passaggio?
  • Nota: codice leggermente semplificato.

Grazie!

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? 
} 

Punto di riferimento

Varie

  • Perché Martini? Sembra dannatamente fantastico.
  • Perché non solo Oauth2? Perché io sono ignorante.
  • Perché non PHP/Python? Perché, dai! Sto cercando di imparare Go. (Sto amando e ottenendo ottimi risultati che migliorano il mio lavoro di interfaccia utente.)
+2

't.Exchange (codice) 'restituisce il token di autenticazione e un errore - controlla il loro valore. – thwd

+1

Vedi anche qui per un esempio più completo: https://code.google.com/p/goauth2/source/browse/oauth/example/oauthreq.go – elithrar

+0

Grazie per i lead. Darei un'occhiata e farei un altro crack. – Geoffrey

risposta

1

Ok, la risposta era principalmente nella mia applicazione client - di nuovo, non in Go - che aveva alcuni aspetti mancanti nel suo OAuth2 richiesta. (Ha inoltre preso un po 'di sforzo per ottenere le intestazioni corretto per le diverse richieste.)

Il migliori informazioni per il processo OAuth2 Reddit ho trovato è stato qui: http://www.reddit.com/r/redditdev/comments/197x36/using_oauth_to_send_valid_requests/

La risposta da Reddit ping ancora mi chiede la ClientID e ClientSecret, che sono sicuro potrebbe essere servito tramite un ResponseWriter adeguato, anche se per il momento sto semplicemente copiando/incollando in un popup solo così posso concentrarmi su qualcos'altro!

Quando ottengo quello quadrato aggiungerò a questa risposta.

Se qualcuno è interessato a ulteriori informazioni, non esitate a chiedere.

Grazie ancora, TomWilde ed Elithrar!

+0

Un altro giorno di lotta ha rivelato il problema: un gestore degli errori sovrascriveva costantemente i risultati del gestore del successo. – Geoffrey