나는 GO 및 API에 익숙하지 않으며 GO를 사용하여 백 엔드를 만들고 있습니다. 사용자는 Google 계정을 사용하여 로그인하고 자신의 캘린더를 수정할 수 있어야합니다. 나는이 링크 Google Quickstart이동을 사용하여 Google 캘린더를 사용하려면 어떻게 로그인 하시겠습니까?
에 샘플을 열었지만 얻는 방법은 클라이언트이 구글에서 내가 사용자 로그인을하고
나는 GO 및 API에 익숙하지 않으며 GO를 사용하여 백 엔드를 만들고 있습니다. 사용자는 Google 계정을 사용하여 로그인하고 자신의 캘린더를 수정할 수 있어야합니다. 나는이 링크 Google Quickstart이동을 사용하여 Google 캘린더를 사용하려면 어떻게 로그인 하시겠습니까?
에 샘플을 열었지만 얻는 방법은 클라이언트이 구글에서 내가 사용자 로그인을하고
당신은해야합니다 그의 일정 얻는 방법 나 에주는 열쇠입니다 같은 수행
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에서 토큰을받습니다. 그런 다음 세션에 저장합니다. 클라이언트를 얻으려면 세션에서 토큰을 가져 와서이를 사용하여 새 클라이언트를 교환 한 다음이를 사용하여 달력 서비스를 만듭니다.
코드를 정확히 검사하지는 않았지만 실제로는 기본적으로이 코드를 사용하는 응용 프로그램에서 최소한의 예제를 만들려고 했으므로 가져 오기 또는 오타 또는 일부 사소한 내용은 제외하고 작동해야합니다. .