如何在DNN 8中通过C#编程锁定/解锁用户账户
DNN 8 编程锁定/解锁用户账户解决方案
解锁用户的正确方法
直接设置User.Membership.LockedOut = false不生效,是因为DNN的会员状态需要通过官方API方法更新,而非直接修改属性。以下是可行的解锁代码:
using DotNetNuke.Entities.Users; using DotNetNuke.Security.Membership; // 替换为实际的PortalID和目标用户ID int portalId = 0; int userId = 123; UserInfo targetUser = UserController.GetUserById(portalId, userId); if (targetUser != null && targetUser.Membership.LockedOut) { // 调用MembershipProvider的官方解锁方法 MembershipProvider membershipProvider = MembershipProvider.Instance(); membershipProvider.UnlockUser(targetUser.Username); // 刷新用户信息,确保状态同步到数据库和缓存 UserController.RefreshUser(targetUser.PortalID, targetUser.UserID); }
编程锁定用户账户
DNN 8后台无手动锁定按钮,但可以通过代码强制设置锁定状态,实现方式如下:
using DotNetNuke.Entities.Users; using DotNetNuke.Security.Membership; int portalId = 0; int userId = 123; UserInfo targetUser = UserController.GetUserById(portalId, userId); if (targetUser != null && !targetUser.Membership.LockedOut) { // 设置锁定标记及锁定时间 targetUser.Membership.LockedOut = true; targetUser.Membership.LastLockoutDate = DateTime.Now; // 更新用户信息到数据库 UserController.UpdateUser(portalId, targetUser); // 通过MembershipProvider同步会员状态 MembershipProvider.Instance().UpdateUser(targetUser.Membership); }
注意事项
- 操作代码需以管理员权限执行,否则会因权限不足失败。
- 修改状态后必须调用
RefreshUser或UpdateUser,确保缓存与数据库状态同步。 - 验证时可查看数据库
aspnet_Membership表的IsLockedOut字段,确认状态是否更新。
内容的提问来源于stack exchange,提问作者DevilDog
相关产品推荐
相关产品推荐

