2017-10-31 12 views

답변

2

당신은해야합니다 그의 일정 얻는 방법 나 에주는 열쇠입니다 같은 수행

import (
    "crypto/rand" 
    "encoding/base64" 
    "encoding/gob" 
    "golang.org/x/oauth2/google" 
    "golang.org/x/oauth2" 
    calendar "google.golang.org/api/calendar/v3" 
    "github.com/gorilla/sessions" 
) 
var conf oauth2.Config 

func init() { 
    gob.Register(&oauth2.Token{}) 
} 

func getLoginURL(state string) string { 
    // State can be some kind of random generated hash string. 
    // See relevant RFC: http://tools.ietf.org/html/rfc6749#section-10.12 
    return conf.AuthCodeURL(state) 
} 

func randToken() string { 
    b := make([]byte, 32) 
    rand.Read(b) 
    return base64.StdEncoding.EncodeToString(b) 
} 

func Login(w http.ResponseWriter, r *http.Request) { 
    conf = &oauth2.Config{ 
     ClientID: "your-client-id", 
     ClientSecret: "your-client-secret", 
     RedirectUrl: "https://www.yoursite.com/auth", 
     Endpoint: google.Endpoint, 
     Scopes: []string{"https://www.googleapis.com/auth/calendar"} 
    } 
    state := randToken() 
    sess, _ := session.Get(r, "session") 
    sess.Values["state"] = state 
    sess.Save(r, w) 
    http.Redirect(w, r, conf.AuthCodeURL(state), http.StatusFound) 
} 

func Auth(w http.ResponseWriter, r *http.Request) { 
    sess, _ := session.Get(r, "session") 
    state = sess.Values["state"] 
    if state != r.URL.Query().Get("state") { 
     http.Error(w, "authorization failed", http.StatusUnauthorized) 
     return 
    } 
    tok, _ := conf.Exchange(oauth2.NoContext, c.QueryParam("code")) 
    sess.Values["token"] = tok 
    sess.Save(r, w) 
    http.Redirect(w, r, "https://www.yoursite.com/profile", http.StatusFound) 
} 

func GetClient(r *http.Request) *http.Client { 
    sess, _ := session.Get(r, "session") 
    tok, _ := sess.Values["token"].(*oauth2.Token) 
    client := conf.Client(oauth2.NoContext, tok) 
    return client 
} 

func Calendar(w http.ResponseWriter, r *http.Request) { 
    client := GetClient(r) 
    calendarService, _ = calendar.New(client) 
    //do stuff 
} 

그래서, 당신은 당신의 Login 처리기로 보내을,이 임의의 키를 생성하고, 자신의 달력에 액세스하도록 로그인이 있고 권한을 부여하기 위해 Google에 (사용자)를 전송하는 그런 다음 사용자에게 리디렉션합니다. Auth 핸들러. 그러면 그들이 보낸 state 키가 보낸 편지와 일치하는지 확인하고, 일치하는 경우 Google에서 토큰을받습니다. 그런 다음 세션에 저장합니다. 클라이언트를 얻으려면 세션에서 토큰을 가져 와서이를 사용하여 새 클라이언트를 교환 한 다음이를 사용하여 달력 서비스를 만듭니다.

코드를 정확히 검사하지는 않았지만 실제로는 기본적으로이 코드를 사용하는 응용 프로그램에서 최소한의 예제를 만들려고 했으므로 가져 오기 또는 오타 또는 일부 사소한 내용은 제외하고 작동해야합니다. .