fix: include anthropic.com cookies in all auth checks and API requests
Claude session cookies are on anthropic.com, not claude.ai. The login window was not detecting auth (Cancel stayed, no Done) and API calls were sent without the actual session token. - claudeCookieHeader: include anthropic.com cookies so the token is sent to the usage/bootstrap endpoints - checkInitialSignInState: detect anthropic.com cookies on startup - didFinish in LoginView: fire auth when anthropic.com cookies found - signOut: clear anthropic.com data alongside claude.ai - notAuthenticated catch: set isSignedIn = false so Settings stays in sync with the main panel
This commit is contained in:
@@ -15,9 +15,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.2.1-beta.6</string>
|
||||
<string>1.2.1-beta.7</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>54</string>
|
||||
<string>55</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>13.0</string>
|
||||
<key>LSUIElement</key>
|
||||
|
||||
@@ -38,7 +38,7 @@ struct LoginWebView: NSViewRepresentable {
|
||||
|
||||
// URL is not a login/auth page, so if any claude.ai cookie exists we're signed in
|
||||
WKWebsiteDataStore.default().httpCookieStore.getAllCookies { cookies in
|
||||
let hasAnyCookie = cookies.contains { $0.domain.contains("claude.ai") }
|
||||
let hasAnyCookie = cookies.contains { $0.domain.contains("claude.ai") || $0.domain.contains("anthropic.com") }
|
||||
guard hasAnyCookie, !self.didAuthenticate else { return }
|
||||
self.didAuthenticate = true
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
|
||||
|
||||
@@ -43,7 +43,7 @@ class UsageViewModel: ObservableObject {
|
||||
|
||||
private func checkInitialSignInState() async {
|
||||
let cookies = await WKWebsiteDataStore.default().httpCookieStore.allCookies()
|
||||
let hasAnyCookie = cookies.contains { $0.domain.contains("claude.ai") }
|
||||
let hasAnyCookie = cookies.contains { $0.domain.contains("claude.ai") || $0.domain.contains("anthropic.com") }
|
||||
if hasAnyCookie { isSignedIn = true }
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ class UsageViewModel: ObservableObject {
|
||||
let store = WKWebsiteDataStore.default()
|
||||
let types = WKWebsiteDataStore.allWebsiteDataTypes()
|
||||
let records = await store.dataRecords(ofTypes: types)
|
||||
let claudeRecords = records.filter { $0.displayName.contains("claude.ai") }
|
||||
let claudeRecords = records.filter { $0.displayName.contains("claude.ai") || $0.displayName.contains("anthropic.com") }
|
||||
await store.removeData(ofTypes: types, for: claudeRecords)
|
||||
UserDefaults.standard.removeObject(forKey: "claude_org_id")
|
||||
isSignedIn = false
|
||||
@@ -109,6 +109,7 @@ class UsageViewModel: ObservableObject {
|
||||
checkLimitNotifications(for: limits)
|
||||
} catch AppError.notAuthenticated {
|
||||
isNotAuthenticated = true
|
||||
isSignedIn = false
|
||||
errorMessage = "Not signed in"
|
||||
} catch let error as DecodingError {
|
||||
switch error {
|
||||
@@ -192,7 +193,7 @@ class UsageViewModel: ObservableObject {
|
||||
|
||||
private func claudeCookieHeader() async -> String? {
|
||||
let cookies = await WKWebsiteDataStore.default().httpCookieStore.allCookies()
|
||||
let claudeCookies = cookies.filter { $0.domain.contains("claude.ai") }
|
||||
let claudeCookies = cookies.filter { $0.domain.contains("claude.ai") || $0.domain.contains("anthropic.com") }
|
||||
return HTTPCookie.requestHeaderFields(with: claudeCookies)["Cookie"]
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -6,4 +6,6 @@
|
||||
- Fixed login window auto-closing before the user could sign in — the login window now correctly loads the `/login` page so it only detects auth after the actual sign-in redirect
|
||||
- Fixed "No API key configured" showing after signing out — now correctly shows "Not signed in" with a prompt to sign in
|
||||
- Added `/api/organizations` as a final fallback for org ID resolution when the bootstrap API response doesn't include it
|
||||
- Fixed usage data not loading after sign-in — API requests now include required browser-like headers (Origin, Referer, User-Agent) that Claude's usage endpoints require
|
||||
- Fixed usage data not loading — API requests now include required browser-like headers (Origin, Referer, User-Agent)
|
||||
- Fixed sign-in detection and cookie handling for accounts whose session cookies are on the `anthropic.com` domain rather than `claude.ai`
|
||||
- Fixed Settings incorrectly showing "Signed in" after a failed refresh — sign-in state now resets when authentication fails
|
||||
|
||||
Reference in New Issue
Block a user