zoukankan      html  css  js  c++  java
  • Token生成(转载)

    package main
    
    import (
        "encoding/base64"
        "encoding/json"
        "log"
        "net/http"
        "strconv"
        "strings"
    
        "github.com/go-redis/redis"
        "github.com/satori/go.uuid"
    )
    
    type objMessage struct {
        UID      int64  `json:"uid"`
        UserName string `json:"user_name"`
    }
    
    type token struct {
        Token string `json:"token"`
    }
    
    type tokenResponse struct {
        Data token `json:"data"`
    }
    
    var client *redis.Client
    
    func genToken(appid int, username string) string {
        u2, _ := uuid.NewV4()
    
        return u2.String()
    }
    
    func grantHandler(w http.ResponseWriter, r *http.Request) {
        encodeBasic := strings.TrimPrefix(r.Header["Authorization"][0], "Basic ")
    
        decodeBasic, _ := base64.StdEncoding.DecodeString(encodeBasic)
    
        auth := string(decodeBasic)
    
        appidStr := strings.Split(auth, ":")[0]
    
        appid, _ := strconv.Atoi(appidStr)
    
        var om objMessage
    
        err := json.NewDecoder(r.Body).Decode(&om)
        if err != nil {
            http.Error(w, err.Error(), 400)
            return
        }
    
        var tr tokenResponse
    
        tr.Data.Token = genToken(appid, om.UserName)
    
        fmap := make(map[string]interface{})
        fmap["user_id"] = int64(om.UID)
        fmap["app_id"] = int64(appid)
        fmap["notification_on"] = int8(1)
        fmap["forbidden"] = int(1)
    
        client.HMSet("access_token_"+tr.Data.Token, fmap)
    
        w.Header().Set("Content-Type", "application/json")
    
        w.WriteHeader(http.StatusOK)
    
        json.NewEncoder(w).Encode(tr)
    
    }
    
    func main() {
        http.HandleFunc("/auth/grant", grantHandler)
    
        client = redis.NewClient(&redis.Options{
            Addr:     "172.16.0.201:6379",
            Password: "", // no password set
            DB:       1,  // use default DB
        })
    
        log.Fatal(http.ListenAndServe(":8090", nil))
    }
  • 相关阅读:
    C++学习9 this指针详解
    福建省第八届 Triangles
    UVA 11584 Partitioning by Palindromes
    POJ 2752 Seek the Name, Seek the Fame
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    HDU 2988 Dark roads(kruskal模板题)
    HDU 1385 Minimum Transport Cost
    HDU 2112 HDU Today
    HDU 1548 A strange lift(最短路&&bfs)
  • 原文地址:https://www.cnblogs.com/nuanshou/p/10553016.html
Copyright © 2011-2022 走看看