You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI自动登录系统实现咨询:如何持久化登录状态

.NET MAUI 实现关闭应用后自动登录

要实现关闭应用后保持登录状态,核心是安全存储用户有效凭证,并在应用启动时自动验证这些凭证。以下是具体实现步骤:

1. 使用SecureStorage安全存储登录凭证

.NET MAUI提供的SecureStorage API,会在各平台调用系统级安全存储(比如iOS的Keychain、Android的Keystore),避免明文存储敏感信息。

修改登录验证逻辑,登录成功后存储凭证

在你的LoginVerification方法中,验证通过后添加存储逻辑:

public async Task LoginVerification()
{
    bool isValid = await CheckIfValid(username, password);

    if (isValid)
    {
        Debug.WriteLine("User Was Found");
        // 安全存储用户名和密码(生产环境优先存服务端令牌,而非密码)
        await SecureStorage.Default.SetAsync("SavedUsername", username);
        await SecureStorage.Default.SetAsync("SavedPassword", password);
        
        // 执行跳转主页面等后续操作
    }
    else
    {
        Debug.WriteLine("User Not Found");
        // 处理登录失败逻辑
    }
}

2. 应用启动时自动验证存储的凭证

在应用启动阶段(比如App.xaml.cs的OnStart方法,或登录页初始化逻辑),检查是否存在已存储的凭证,若有效则直接跳转主页面:

在App.xaml.cs中添加启动检查逻辑

protected override async void OnStart()
{
    base.OnStart();
    
    // 读取已存储的凭证
    string savedUsername = await SecureStorage.Default.GetAsync("SavedUsername");
    string savedPassword = await SecureStorage.Default.GetAsync("SavedPassword");

    if (!string.IsNullOrEmpty(savedUsername) && !string.IsNullOrEmpty(savedPassword))
    {
        // 验证存储的凭证是否有效
        var loginHandler = new Login();
        bool isValid = await loginHandler.CheckIfValid(savedUsername, savedPassword);
        
        if (isValid)
        {
            // 验证通过,直接进入主页面
            Application.Current.MainPage = new MainPage();
            return;
        }
        // 凭证无效,清除错误存储
        await SecureStorage.Default.RemoveAsync("SavedUsername");
        await SecureStorage.Default.RemoveAsync("SavedPassword");
    }
    
    // 无有效凭证,显示登录页
    Application.Current.MainPage = new Login();
}

3. 添加登出功能(清除存储的凭证)

当用户主动登出时,需要清除SecureStorage中的凭证,确保下次启动需重新登录:

public async Task Logout()
{
    // 清除存储的登录凭证
    await SecureStorage.Default.RemoveAsync("SavedUsername");
    await SecureStorage.Default.RemoveAsync("SavedPassword");
    
    // 跳转回登录页
    Application.Current.MainPage = new Login();
}

生产环境注意事项

  • 不要直接存储用户密码,优先使用服务端颁发的JWT令牌。登录成功后存储令牌,后续启动时用令牌向服务端验证身份,无需重复输入密码。
  • 部分平台(如Android 13+)需在AndroidManifest.xml中添加对应权限,确保SecureStorage正常工作。

内容的提问来源于stack exchange,提问作者Jeandrè De Villiers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:09:31