AlistGo/alist · error

failed to refresh token: refresh token is empty, resp: %s

Error message

failed to refresh token: refresh token is empty, resp: %s

What it means

Error "failed to refresh token: refresh token is empty, resp: %s" thrown in AlistGo/alist.

Source

Thrown at drivers/aliyundrive_open/util.go:140

		return "", "", err
	}
	log.Debugf("[ali_open] refresh token response: %s", res.String())
	if res.StatusCode() == http.StatusTooManyRequests {
		message := e.Message
		if message == "" {
			message = http.StatusText(http.StatusTooManyRequests)
		}
		return "", "", &refreshRateLimitError{
			message:    fmt.Sprintf("failed to refresh token: %s", message),
			retryAfter: retryAfterFromResponse(res),
		}
	}
	if e.Code != "" {
		return "", "", fmt.Errorf("failed to refresh token: %s", e.Message)
	}
	refresh, access := utils.Json.Get(res.Body(), "refresh_token").ToString(), utils.Json.Get(res.Body(), "access_token").ToString()
	if refresh == "" {
		return "", "", fmt.Errorf("failed to refresh token: refresh token is empty, resp: %s", res.String())
	}
	curSub, err := getSub(d.RefreshToken)
	if err != nil {
		return "", "", err
	}
	newSub, err := getSub(refresh)
	if err != nil {
		return "", "", err
	}
	if curSub != newSub {
		return "", "", errors.New("failed to refresh token: sub not match")
	}
	return refresh, access, nil
}

func getSub(token string) (string, error) {
	segments := strings.Split(token, ".")
	if len(segments) != 3 {

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Re-authenticate the storage: obtain a new refresh_token via the provider's OAuth flow and update the storage configuration.
  2. Verify client_id/client_secret are correct and the refresh token has not been revoked or expired.

When it happens

Trigger: Thrown at drivers/aliyundrive_open/util.go:140 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/aec91c52f9f740b8. Report an issue: GitHub.