{"record":{"id":"93f1c15cf2bfef7d","repo":"AlistGo/alist","slug":"need-verify-a-target-blank-href-s-click-he","errorCode":null,"errorMessage":"need verify: <a target=\"_blank\" href=\"%s\">Click Here</a>","messagePattern":"need verify: <a target=\"_blank\" href=\"(.+?)\">Click Here</a>","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/halalcloud/util.go","lineNumber":83,"sourceCode":"\tctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)\n\tdefer cancel()\n\tstateString := uuid.New().String()\n\t// queryValues.Add(\"callback\", oauthToken.Callback)\n\toauthToken, err := userClient.CreateAuthToken(ctx, &pbPublicUser.LoginRequest{\n\t\tReturnType: 2,\n\t\tState:      stateString,\n\t\tReturnUrl:  \"\",\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(oauthToken.State) < 1 {\n\t\toauthToken.State = stateString\n\t}\n\n\tif oauthToken.Url != \"\" {\n\n\t\treturn nil, fmt.Errorf(`need verify: <a target=\"_blank\" href=\"%s\">Click Here</a>`, oauthToken.Url)\n\t}\n\n\treturn aService, err2\n\n}\n\nfunc (d *HalalCloud) NewAuthService(refreshToken string, options ...HalalOption) (*AuthService, error) {\n\tsvc := d.HalalCommon.AuthService\n\n\tif len(refreshToken) < 1 {\n\t\trefreshToken = d.Addition.RefreshToken\n\t}\n\n\tif len(d.tr.AccessToken) > 0 {\n\t\taccessTokenExpiredAt := d.tr.AccessTokenExpiredAt\n\t\tcurrent := time.Now().UnixMilli()\n\t\tif accessTokenExpiredAt < current {\n\t\t\t// access token expired","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/halalcloud/util.go#L65-L101","documentation":"Returned by HalalCloud's auth flow when the OAuth/login endpoint responds with a non-empty Url field alongside the token exchange. The service is demanding interactive identity verification (device check / captcha / risk control) before it will finish authorizing the session, and the only way forward is for a human to open that URL in a browser.","triggerScenarios":"Logging in from a new IP, new device fingerprint, or datacenter IP that trips HalalCloud risk control; refreshing a refresh token that was issued in a different session context; repeated login attempts in a short window.","commonSituations":"Self-hosted OpenList/AList instances on VPS IPs flagged by the provider; users rotating refresh tokens in config without completing verification; time-skewed clients causing the server to treat the login as suspicious.","solutions":["Click the embedded link (or give it to the account owner) and complete the verification in a browser where the account is already logged in.","Re-login in the browser first, then re-run the driver's login/token flow so risk-control state is cleared.","Whitelist/stabilize the egress IP for the server running the driver to avoid repeated risk challenges.","After verifying, generate a fresh refresh token via the official flow and update the driver config instead of reusing the challenged one."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"svc, err := d.NewAuthService(token)\nif err != nil && strings.Contains(err.Error(), \"need verify\") {\n    url := extractHref(err.Error())\n    surfaceToUser(\"complete verification at \" + url) // human-in-the-loop\n    return err\n}","preventionTips":["Complete verification in a logged-in browser before automating","Use a stable egress IP for the host running the driver","Refresh tokens only via the official flow after verification"],"tags":["halalcloud","oauth","risk-control","interactive-verification"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}