// github && google && ... func SocialSignIn(tokens oauth2.Tokens) { transport := &oauth.Transport{} transport.Token = &oauth.Token{ AccessToken: tokens.Access(), RefreshToken: tokens.Refresh(), Expiry: tokens.ExpiryTime(), Extra: tokens.ExtraData(), } // Github API refer: https://developer.github.com/v3/users/ // FIXME: need to judge url type GithubUser struct { Id int `json:"id"` Name string `json:"login"` Email string `json:"email"` } // Make the request. scope := "https://api.github.com/user" r, err := transport.Client().Get(scope) if err != nil { log.Error("connect with github error: %s", err) // FIXME: handle error page return } defer r.Body.Close() user := &GithubUser{} err = json.NewDecoder(r.Body).Decode(user) if err != nil { log.Error("Get: %s", err) } log.Info("login: %s", user.Name) // FIXME: login here, user email to check auth, if not registe, then generate a uniq username }
func getUserInfo(tokens oauth2.Tokens) (userObject map[string]interface{}) { url := "https://www.googleapis.com/plus/v1/people/me" token := &goauth2.Token{ AccessToken: tokens.Access(), TokenType: "Bearer", RefreshToken: tokens.Refresh(), Expiry: tokens.ExpiryTime(), } client := OauthConfig.Client(goauth2.NoContext, token) resp, _ := client.Get(url) defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) json.Unmarshal(body, &userObject) addUserObjectToCache(tokens, userObject) return }