fix: correct session cookie detection and auto-close on login

This commit is contained in:
SuperDooper
2026-05-08 13:07:06 +02:00
parent c7a663c42b
commit 2d000bca5e
+25 -12
View File
@@ -1,5 +1,6 @@
using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.Core;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
@@ -28,18 +29,25 @@ public partial class LoginWindow : Window
{ {
if (!e.IsSuccess) return; if (!e.IsSuccess) return;
var uri = Browser.CoreWebView2.Source; var uri = Browser.CoreWebView2.Source;
if (uri.Contains("claude.ai") && !uri.Contains("/login")) if (!uri.Contains("claude.ai")) return;
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai");
var signedIn = cookies.Any(c =>
c.Name.Equals("sessionKey", StringComparison.OrdinalIgnoreCase) ||
c.Name.StartsWith("sk-ant", StringComparison.OrdinalIgnoreCase));
await Dispatcher.InvokeAsync(() =>
{ {
// Likely signed in — enable done button DoneButton.IsEnabled = !uri.Contains("/login") && !uri.Contains("/signin");
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai"); StatusText.Text = signedIn
var hasSess = cookies.Any(c => c.Name.Contains("session") || c.Name.Contains("sk-")); ? "Signed in — click Done to continue."
await Dispatcher.InvokeAsync(() => : "Complete sign-in, then click Done.";
{ });
DoneButton.IsEnabled = hasSess || uri.Contains("/chats") || uri.Contains("/new");
StatusText.Text = DoneButton.IsEnabled // Auto-close once clearly on the main app page
? "Signed in! Click Done to continue." if (signedIn && (uri.Contains("/chats") || uri.Contains("/new") || uri == "https://claude.ai/"))
: "Waiting for sign-in…"; {
}); await SaveAndClose(cookies);
} }
}; };
} }
@@ -47,7 +55,12 @@ public partial class LoginWindow : Window
private async void Done_Click(object sender, RoutedEventArgs e) private async void Done_Click(object sender, RoutedEventArgs e)
{ {
var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai"); var cookies = await Browser.CoreWebView2.CookieManager.GetCookiesAsync("https://claude.ai");
await SaveAndClose(cookies);
}
private async Task SaveAndClose(IReadOnlyList<CoreWebView2Cookie> cookies)
{
UsageViewModel.SaveCookies(cookies); UsageViewModel.SaveCookies(cookies);
DialogResult = true; await Dispatcher.InvokeAsync(() => DialogResult = true);
} }
} }