AlistGo/alist · critical
login failed: provide a valid access_token, or refresh_token
Error message
login failed: provide a valid access_token, or refresh_token, or phone_number + verify_code + captcha_token
What it means
GuangYaPan (光雅盘) driver Init: after checking access_token, refresh_token and SMS-based login paths, none of the required credential combinations were present in the storage configuration. The driver requires at least one of: a valid access_token, a refresh_token, or the phone_number + verify_code + captcha_token triple to authenticate.
Source
Thrown at drivers/guangyapan/driver.go:152
return err
}
if err := d.validateToken(ctx); err != nil {
return err
}
return d.prepareRootFolder(ctx)
}
if d.SendCode {
d.setTempStatus("SMS sending in progress...")
if err := d.prepareSMSCode(ctx); err != nil {
d.setTempStatus(fmt.Sprintf("SMS send failed: %v. Please check captcha/meta and set send_code=true to retry.", err))
log.Warnf("guangyapan: prepare sms code failed: %v", err)
} else {
d.setTempStatus("SMS sent successfully. Please fill verify_code and save to complete login.")
}
}
return nil
}
return errors.New("login failed: provide a valid access_token, or refresh_token, or phone_number + verify_code + captcha_token")
}
func (d *GuangYaPan) Drop(ctx context.Context) error {
return nil
}
func (d *GuangYaPan) GetRoot(ctx context.Context) (model.Obj, error) {
rootID, err := d.getRootFolderID(ctx)
if err != nil {
return nil, err
}
return &model.Object{
ID: rootID,
Path: "/",
Name: "root",
Size: 0,
Modified: d.Modified,
IsFolder: true,View on GitHub (pinned to 843d9dc814)
Solutions
- Paste a valid access_token (from browser dev-tools on the provider's site) into the storage config
- Or provide a refresh_token so the driver can renew access itself
- Or complete SMS login: fill phone_number + captcha_token, set send_code=true to get the code, then fill verify_code and save
- Make sure no field has whitespace-only content — the driver trims and treats it as empty
Example fix
// before: storage config access_token: "" refresh_token: "" phone_number: "13800138000" // alone is not enough // after phone_number: "13800138000" verify_code: "123456" // received via SMS captcha_token: "..." // from provider captcha
Defensive patterns
Strategy: validation
Validate before calling
// Validate storage config before Init
hasToken := strings.TrimSpace(cfg.AccessToken) != ""
hasRefresh := strings.TrimSpace(cfg.RefreshToken) != ""
hasSMS := cfg.PhoneNumber != "" && cfg.VerifyCode != "" && cfg.CaptchaToken != ""
if !hasToken && !hasRefresh && !hasSMS {
return errors.New("guangyapan: supply access_token, refresh_token, or complete SMS credentials")
} Type guard
func smsLoginReady(c GuangYaPanConfig) bool {
return c.PhoneNumber != "" && c.VerifyCode != "" && c.CaptchaToken != ""
} Try / catch
if err := storage.Init(ctx); err != nil {
if strings.Contains(err.Error(), "login failed: provide a valid") {
// guide user to the credential form rather than retrying
return errors.New("open storage settings and fill access_token / refresh_token / SMS fields")
}
return err
} Prevention
- Prefer pasting a refresh_token captured from the provider's web session — it survives expiry
- Complete the SMS flow in one sitting: captcha -> send_code -> verify_code -> save
- Trim credentials when pasting; stray spaces make fields read as empty
When it happens
Trigger: Saving/loading a GuangYaPan storage where AccessToken, RefreshToken are empty and the phone/SMS fields (phone_number, verify_code, captcha_token) are incomplete — e.g. only phone_number filled, or SMS login was started but never completed.
Common situations: First-time setup where the user pasted only a username, copied an expired/blank token, or abandoned the two-step SMS login midway (sent code but never entered it).
Related errors
- not logged in yet: please fill verify_code and save storage
- access token is empty
- validate token failed: empty user sub
- refresh_token is empty
- authn not support
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/42ba66cd521e2795.
Report an issue: GitHub.