fix: preserve login method across session windows

This commit is contained in:
21pages committed 2026-10-31 16:54:28 +08:00
1 parent 956031d109
commit a2d21df237
5 files changed
+33 -3

No files matched your search

+3 -1
View File
@@ -579,7 +579,9 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
bool isTerminal = false}) {
final connToken = bind.sessionGetConnToken(sessionId: ffi.sessionId);
connect(context, id,
loginMethod: ffi.loginMethod,
loginMethod: bind.sessionGetCommonSync(
sessionId: ffi.sessionId, key: 'login_method', param: '') ??
'',
isFileTransfer: isFileTransfer,
isViewCamera: isViewCamera,
isTerminal: isTerminal,
-2
View File
@@ -4032,7 +4032,6 @@ class FFI {
var id = '';
var version = '';
var connType = ConnType.defaultConn;
var loginMethod = '';
var closed = false;
/// dialogManager use late to ensure init after main page binding [globalKey]
@@ -4127,7 +4126,6 @@ class FFI {
List<int>? displays,
String loginMethod = '',
}) {
this.loginMethod = loginMethod;
closed = false;
if (isMobile) mobileReset();
assert(
+3
View File
@@ -1966,6 +1966,9 @@ class RustdeskImpl {
required String key,
required String param,
dynamic hint}) {
if (key == 'login_method') {
return js.context.callMethod('getByName', ['login_method']);
}
throw UnimplementedError("sessionGetCommonSync");
}
+25
View File
@@ -19,6 +19,13 @@ impl LoginConfigHandler {
pub(crate) fn skips_saved_password(&self) -> bool {
self.login_method != LoginMethod::Automatic
}
pub(crate) fn get_login_method(&self) -> &'static str {
match self.login_method {
LoginMethod::Automatic => "",
LoginMethod::Consent => "consent",
}
}
}
#[cfg(all(test, feature = "flutter"))]
@@ -70,9 +77,27 @@ mod tests {
None,
method.to_owned(),
);
let monitor_session_id = uuid::Uuid::new_v4();
let monitor_result = crate::flutter_ffi::session_add_existed_sync(
format!("login-method-init-{}", session_id),
monitor_session_id,
vec![0],
false,
);
let methods = [session_id, monitor_session_id].map(|id| {
crate::flutter_ffi::session_get_common_sync(
id,
"login_method".to_owned(),
String::new(),
)
.0
});
crate::flutter::sessions::remove_session_by_session_id(&monitor_session_id);
let session = crate::flutter::sessions::remove_session_by_session_id(&session_id);
hbb_common::config::LocalConfig::set_remote_id(&remote_id);
assert!(result.0.is_empty(), "{}", result.0);
assert!(monitor_result.0.is_empty(), "{}", monitor_result.0);
assert_eq!(methods, [Some(method.to_owned()), Some(method.to_owned())]);
let session = session.unwrap();
let request = session
.lc
+2
View File
@@ -3055,6 +3055,8 @@ pub fn session_get_common(
if let Some(s) = sessions::get_session_by_session_id(&session_id) {
let v = if key == "is_screenshot_supported" {
s.is_screenshot_supported().to_string()
} else if key == "login_method" {
s.lc.read().unwrap().get_login_method().to_owned()
} else {
"".to_owned()
};