本文整理汇总了Golang中github.com/martini-contrib/oauth2.Tokens.ExtraData方法的典型用法代码示例。如果您正苦于以下问题:Golang Tokens.ExtraData方法的具体用法?Golang Tokens.ExtraData怎么用?Golang Tokens.ExtraData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/martini-contrib/oauth2.Tokens
的用法示例。
在下文中一共展示了Tokens.ExtraData方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: SocialSignIn
// 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
}
示例2: Authenticate
func (a *GoogleAuth) Authenticate(domain []string, c martini.Context, tokens oauth2.Tokens, w http.ResponseWriter, r *http.Request) {
extra := tokens.ExtraData()
if _, ok := extra["id_token"]; ok == false {
log.Printf("id_token not found")
forbidden(w)
return
}
keys := strings.Split(extra["id_token"], ".")
if len(keys) < 2 {
log.Printf("invalid id_token")
forbidden(w)
return
}
data, err := base64Decode(keys[1])
if err != nil {
log.Printf("failed to decode base64: %s", err.Error())
forbidden(w)
return
}
var info map[string]interface{}
if err := json.Unmarshal(data, &info); err != nil {
log.Printf("failed to decode json: %s", err.Error())
forbidden(w)
return
}
if email, ok := info["email"].(string); ok {
var user *User
if len(domain) > 0 {
for _, d := range domain {
if strings.Contains(d, "@") {
if d == email {
user = &User{email}
}
} else {
if strings.HasSuffix(email, "@"+d) {
user = &User{email}
break
}
}
}
} else {
user = &User{email}
}
if user != nil {
log.Printf("user %s logged in", email)
c.Map(user)
} else {
log.Printf("email doesn't allow: %s", email)
forbidden(w)
return
}
} else {
log.Printf("email not found")
forbidden(w)
return
}
}