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))
    }
  • 相关阅读:
    mysql命令集锦
    linux 删除文件名带括号的文件
    linux下的cron定时任务
    struts2文件下载的实现
    贴一贴自己写的文件监控代码python
    Service Unavailable on IIS6 Win2003 x64
    'style.cssText' is null or not an object
    "the current fsmo could not be contacted" when change rid role
    远程激活程序
    新浪图片病毒
  • 原文地址:https://www.cnblogs.com/nuanshou/p/10553016.html
Copyright © 2011-2022 走看看