【问题标题】:PasswordBox binding in MVVMMVVM 中的 PasswordBox 绑定
【发布时间】:2014-02-09 06:29:51
【问题描述】:

绑定到 PasswordBox 的问题,这是一个安全风险,但我使用的是 MVVM 模式,我在这里找到了一些有趣的代码

http://www.wpftutorial.net/PasswordBox.html

我的 LoginViewModel 中基本上有用于用户名和密码的属性。用户名很好,因为它是一个文本框。

我使用上面的代码并输入了这个

<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>

当我将 PasswordBox 作为 TextBox 并且 Binding Path=Password 时,我的 LoginViewModel 中的属性已更新。

我的代码很简单,基本上我的按钮有一个命令。当我按下它时,会调用 CanLogin,如果它返回 true,则调用 Login。 你可以看到我在这里检查了我的用户名属性,效果很好。

在登录时,我向我的服务发送用户名和密码,用户名包含来自我的视图的数据,但密码为 Null|Empty

<TextBox Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"
     MinWidth="180" />

<PasswordBox ff:PasswordHelper.Attach="True" 
         ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>

我有我的 TextBox,这没问题,但在我的 ViewModel 中,密码为空。

我放了一个断点,果然代码进入了静态帮助类,但它从不更新我的 ViewModel 中的密码

【问题讨论】:

标签: c# asp.net wpf mvvm passwords


【解决方案1】:

请停止您正在尝试做的事情,因为在应用程序周围传递未加密的密码是一个可怕的安全风险。您应该像这样登录您的用户:

为他们提供用户名和密码输入字段,但密码值应立即加密。您的数据库应该只存储这些加密密码。因此,要验证用户是否输入了正确的密码,您只需比较加密密码的值。

因此,您不需要将用户密码字段的值传递给数据库进行检查...您需要将加密数据库中的密码值传递给到 视图模型。

【讨论】:

    【解决方案2】:

    您应该按照 MSDN 的建议使用 SecureString,请参阅此处的参考资料:

    wpf password box into a SecureString in C#

    如果有帮助,请告诉我,我们已通过附加属性成功绑定密码,但希望您可以从上面的链接中自己学习:)

    【讨论】:

    • 这里即将投反对票...如果我是你,我会删除第一个链接,因为 它没有答案,它表明 在添加链接之前您没有费心检查。
    猜你喜欢
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2019-06-27
    • 2015-05-11
    • 2014-04-26
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多