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))
    }
  • 相关阅读:
    隐藏导航练习
    分层导航
    做一个问题,如果输入的答案正确则弹出正确,错误弹出错误
    同意按钮,倒计时10秒
    golang strings
    seek指针大文件上传
    go文件操作大全
    zipimport.ZipImportError: can't decompress data; zlib not available 解决办法
    centos 安装redis自启动要点
    golang 文件读取
  • 原文地址:https://www.cnblogs.com/nuanshou/p/10553016.html
Copyright © 2011-2022 走看看