Keep user tokens, fix user info loading

This commit is contained in:
Gregory Eremin 2015-03-15 00:01:48 +07:00
parent aff38168b7
commit 954e140dfd
3 changed files with 19 additions and 5 deletions

View File

@ -27,8 +27,8 @@ func authCallbackHandler(w http.ResponseWriter, r *http.Request) {
code := r.FormValue("code") code := r.FormValue("code")
log.Printf("Got code %q\n", code) log.Printf("Got code %q\n", code)
if _, login, err := task.Authenticate(code); err == nil { if token, login, err := task.Authenticate(code); err == nil {
req.authorize(login) req.authorize(token, login)
} else { } else {
panic(err) panic(err)
} }

View File

@ -16,6 +16,7 @@ type (
r *http.Request r *http.Request
w http.ResponseWriter w http.ResponseWriter
sid string sid string
token string
login string login string
} }
statRequest struct { statRequest struct {
@ -32,16 +33,19 @@ type (
func parseRequest(w http.ResponseWriter, r *http.Request) (*request, *statRequest) { func parseRequest(w http.ResponseWriter, r *http.Request) (*request, *statRequest) {
sid := sessionID(w, r) sid := sessionID(w, r)
login, _ := redis.String(redisPool.Get().Do("HGET", "sessions", sid)) login, _ := redis.String(redisPool.Get().Do("HGET", "sessions", sid))
token, _ := redis.String(redisPool.Get().Do("HGET", "tokens", sid))
req := &request{ req := &request{
r: r, r: r,
w: w, w: w,
sid: sid, sid: sid,
token: token,
login: login, login: login,
} }
return req, parseStatRequest(r) return req, parseStatRequest(r)
} }
func (r *request) authorize(login string) { func (r *request) authorize(token, login string) {
redisPool.Get().Do("HSET", "tokens", r.sid, token)
redisPool.Get().Do("HSET", "sessions", r.sid, login) redisPool.Get().Do("HSET", "sessions", r.sid, login)
} }

View File

@ -18,11 +18,21 @@ func FetchUserInfo(token, login string) (u *db.User, err error) {
} }
saveResponseMeta(token, resp) saveResponseMeta(token, resp)
name := ""
if n := user.Name; n != nil {
name = *user.Name
}
avatarURL := ""
if url := user.AvatarURL; url != nil {
avatarURL = *user.AvatarURL
}
u = &db.User{ u = &db.User{
Login: *user.Login, Login: *user.Login,
Name: *user.Name, Name: name,
ID: uint64(*user.ID), ID: uint64(*user.ID),
AvatarURL: *user.AvatarURL, AvatarURL: avatarURL,
} }
return return