Procházet zdrojové kódy

fix:compatibility cache expiration returns empty string issue (#742)

leonard627 před 2 roky
rodič
revize
0ffe34187a
1 změnil soubory, kde provedl 9 přidání a 6 odebrání
  1. 9 6
      credential/default_access_token.go

+ 9 - 6
credential/default_access_token.go

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