1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-04 12:52:27 +08:00

fix:GetAccessTokenContext从cache中获取字符窜为空时,从微信服务器获取 (#721)

Co-authored-by: markwang <www.wang61@qq.com>
This commit is contained in:
markwang
2023-09-24 10:47:43 +08:00
committed by GitHub
parent ead8a6fadb
commit 49c4cfaf54

View File

@@ -66,8 +66,9 @@ func (ak *DefaultAccessToken) GetAccessToken() (accessToken string, err error) {
func (ak *DefaultAccessToken) GetAccessTokenContext(ctx context.Context) (accessToken string, err error) { func (ak *DefaultAccessToken) GetAccessTokenContext(ctx context.Context) (accessToken string, err error) {
// 先从cache中取 // 先从cache中取
accessTokenCacheKey := fmt.Sprintf("%s_access_token_%s", ak.cacheKeyPrefix, ak.appID) accessTokenCacheKey := fmt.Sprintf("%s_access_token_%s", ak.cacheKeyPrefix, ak.appID)
if val := ak.cache.Get(accessTokenCacheKey); val != nil { val := ak.cache.Get(accessTokenCacheKey)
return val.(string), nil if accessToken = val.(string); accessToken != "" {
return
} }
// 加上lock是为了防止在并发获取token时cache刚好失效导致从微信服务器上获取到不同token // 加上lock是为了防止在并发获取token时cache刚好失效导致从微信服务器上获取到不同token
@@ -75,8 +76,9 @@ func (ak *DefaultAccessToken) GetAccessTokenContext(ctx context.Context) (access
defer ak.accessTokenLock.Unlock() defer ak.accessTokenLock.Unlock()
// 双检,防止重复从微信服务器获取 // 双检,防止重复从微信服务器获取
if val := ak.cache.Get(accessTokenCacheKey); val != nil { val = ak.cache.Get(accessTokenCacheKey)
return val.(string), nil if accessToken = val.(string); accessToken != "" {
return
} }
// cache失效从微信服务器获取 // cache失效从微信服务器获取