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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:20:33