From 81f26cd6dc80eb51df38335b0c46290f94f8a386 Mon Sep 17 00:00:00 2001 From: zdpdpdp Date: Tue, 21 May 2019 12:47:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?add:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=20access=20token=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- context/access_token.go | 10 ++++++++++ context/access_token_test.go | 30 ++++++++++++++++++++++++++++++ context/context.go | 3 +++ 3 files changed, 43 insertions(+) create mode 100644 context/access_token_test.go diff --git a/context/access_token.go b/context/access_token.go index a7f7810..22b9639 100644 --- a/context/access_token.go +++ b/context/access_token.go @@ -22,16 +22,26 @@ type ResAccessToken struct { ExpiresIn int64 `json:"expires_in"` } +type CustomGetAccessToken func(ctx *Context) (accessToken string, err error) + //SetAccessTokenLock 设置读写锁(一个appID一个读写锁) func (ctx *Context) SetAccessTokenLock(l *sync.RWMutex) { ctx.accessTokenLock = l } +//SetGetAccessTokenFunc 设置自定义获取accessToken的方式, 需要自己实现缓存 +func (ctx *Context) SetGetAccessTokenFunc(f CustomGetAccessToken) { + ctx.accessTokenFunc = f +} + //GetAccessToken 获取access_token func (ctx *Context) GetAccessToken() (accessToken string, err error) { ctx.accessTokenLock.Lock() defer ctx.accessTokenLock.Unlock() + if ctx.accessTokenFunc != nil { + return ctx.accessTokenFunc(ctx) + } accessTokenCacheKey := fmt.Sprintf("access_token_%s", ctx.AppID) val := ctx.Cache.Get(accessTokenCacheKey) if val != nil { diff --git a/context/access_token_test.go b/context/access_token_test.go new file mode 100644 index 0000000..fdae218 --- /dev/null +++ b/context/access_token_test.go @@ -0,0 +1,30 @@ +package context + +import ( + "sync" + "testing" +) + +func TestContext_SetCustomAccessTokenFunc(t *testing.T) { + ctx := Context{ + accessTokenLock: new(sync.RWMutex), + } + f := func(ctx *Context) (accessToken string, err error) { + return "fake token", nil + } + ctx.SetGetAccessTokenFunc(f) + res, err := ctx.GetAccessToken() + if res != "fake token" || err != nil { + t.Error("expect fake token but error") + } +} + +func TestContext_NoSetCustomAccessTokenFunc(t *testing.T) { + ctx := Context{ + accessTokenLock: new(sync.RWMutex), + } + + if ctx.accessTokenFunc != nil { + t.Error("error accessTokenFunc") + } +} diff --git a/context/context.go b/context/context.go index 45bcf50..bd0591c 100644 --- a/context/context.go +++ b/context/context.go @@ -27,6 +27,9 @@ type Context struct { //jsAPITicket 读写锁 同一个AppID一个 jsAPITicketLock *sync.RWMutex + + //自定义获取 access token 的方法 + accessTokenFunc CustomGetAccessToken } // Query returns the keyed url query value if it exists From 9a4d41563ea6804e732674b06c837dbea5fcefe4 Mon Sep 17 00:00:00 2001 From: zdpdpdp Date: Tue, 21 May 2019 13:03:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?add:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=20access=20token=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- context/access_token.go | 5 +++-- context/context.go | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/context/access_token.go b/context/access_token.go index 22b9639..7405771 100644 --- a/context/access_token.go +++ b/context/access_token.go @@ -22,7 +22,8 @@ type ResAccessToken struct { ExpiresIn int64 `json:"expires_in"` } -type CustomGetAccessToken func(ctx *Context) (accessToken string, err error) +//GetAccessTokenFunc 获取 access token 的函数签名 +type GetAccessTokenFunc func(ctx *Context) (accessToken string, err error) //SetAccessTokenLock 设置读写锁(一个appID一个读写锁) func (ctx *Context) SetAccessTokenLock(l *sync.RWMutex) { @@ -30,7 +31,7 @@ func (ctx *Context) SetAccessTokenLock(l *sync.RWMutex) { } //SetGetAccessTokenFunc 设置自定义获取accessToken的方式, 需要自己实现缓存 -func (ctx *Context) SetGetAccessTokenFunc(f CustomGetAccessToken) { +func (ctx *Context) SetGetAccessTokenFunc(f GetAccessTokenFunc) { ctx.accessTokenFunc = f } diff --git a/context/context.go b/context/context.go index bd0591c..07e42c3 100644 --- a/context/context.go +++ b/context/context.go @@ -28,8 +28,8 @@ type Context struct { //jsAPITicket 读写锁 同一个AppID一个 jsAPITicketLock *sync.RWMutex - //自定义获取 access token 的方法 - accessTokenFunc CustomGetAccessToken + //accessTokenFunc 自定义获取 access token 的方法 + accessTokenFunc GetAccessTokenFunc } // Query returns the keyed url query value if it exists