使用UserName登录后在主窗体显示对应用户FirstName的实现咨询
功能实现方案
你现在的登录流程已经能正常校验账号、打开主窗体,只要在原有流程上顺带着把对应账号的FirstName接住、传进主窗体即可,不用大改原有代码结构,具体步骤:
- 调整登录环节的验证查询
原来你写的账号校验逻辑,大概率是通过匹配输入的UserName、Password和表内记录判断登录合法性,现在直接把查询的返回字段从校验状态改成匹配行的FirstName:
把原来用于验证的逻辑,从类似SELECT COUNT(*) FROM tbl_login WHERE UserName = @uname AND Password = @pwd的查询,改成SELECT FirstName FROM tbl_login WHERE UserName = @uname AND Password = @pwd。只要查询能返回非空结果,就说明账号验证通过,直接把拿到的FirstName值暂存到登录模块的局部变量里即可,全程不用重复发起数据库查询。
注意所有查询一定要用参数化传值,别直接把用户输入拼进SQL语句,避免注入风险 - 传递参数到主窗体
尽量不要用全局静态变量存暂存的FirstName(这类写法在多用户切换、异常退出场景下很容易出现值残留的bug),最稳妥的方式是在主窗体的构造函数里加一个接收FirstName的形参,弹出主窗体的时候直接把暂存的FirstName当参数传进去,主窗体内部把这个值存成自身的私有字段即可。 - 绑定值到主窗体显示控件
等主窗体完成初始化加载的时候,直接把存好的FirstName赋值给你要展示的文本控件就行。比如你在主窗体上加了个用来显示当前用户的标签控件,直接写赋值逻辑lblActiveUserName.Text = $"当前活跃用户:{你存的FirstName值}",按照你举的例子,用Sam登录的场景下,控件就会显示“当前活跃用户:Samson”,完全符合预期效果。
实际开发里容易踩的坑
- 别等主窗体打开了,才拿用户输入的UserName重新去查一遍FirstName:如果你的登录逻辑加了账号状态判断(比如禁用账号、过期账号拦截),重新查库很容易绕过这些判断把非法用户的信息带出来,破坏权限边界
- tbl_login表里的Password字段不要存明文,存加盐哈希值才是符合安全要求的做法
- 登录环节验证完账号之后,记得把内存里暂存的敏感值(比如用户输入的密码)及时清掉,别长期驻留内存
内容的提问来源于stack exchange,提问作者Tete。
相关产品推荐
相关产品推荐

