在Asp.Net Membership中手动更改用户名
发布时间:2020-12-16 00:18:17 所属栏目:asp.Net 来源:网络整理
导读:我可以通过直接访问asp.net成员资格用户表来更改用户名.但是,旧用户名保留在新行中,并由asp.net自动分配新的UserID.我如何阻止这种情况发生? 编辑:仅在users表和角色表中,而不是在成员资格表中. var mUser = dc.aspnet_Users .Where(u = u.UserId == (Guid
我可以通过直接访问asp.net成员资格用户表来更改用户名.但是,旧用户名保留在新行中,并由asp.net自动分配新的UserID.我如何阻止这种情况发生?
编辑:仅在users表和角色表中,而不是在成员资格表中. var mUser = dc.aspnet_Users .Where(u => u.UserId == (Guid)user.ProviderUserKey) .Select(u => u).SingleOrDefault(); mUser.UserName = newName; mUser.LoweredUserName = newName.ToLower(); try { dc.SubmitChanges(); } catch { ... } 解决方法
ASP.NET 2.0中的sql成员资格提供程序不支持更改用户名.您仍然可以更改用户名,但必须使用自定义实现.
此外,您必须使用新用户名更新成员资格cookie,以避免使用相同的用户名重新创建用户,但新的UserId. 在下面的示例中,我使用Linq to SQL来更新成员资格表 – 我有名为MembershipDataContext的数据上下文. public bool ChangeUserName(Guid userId,string newUserName) { bool success = false; newUserName = newUserName.Trim(); // Make sure there is no user with the new username if (Membership.GetUser(newUserName) == null) { MembershipUser u = Membership.GetUser(userId); string oldUsername = u.UserName; // get current application MembershipDataContext context = new MembershipDataContext (); aspnet_User userToChange = (from user in context.aspnet_Users where user.UserId == userId select user).FirstOrDefault(); if (userToChange != null) { userToChange.UserName = newUserName; userToChange.LoweredUserName = newUserName.ToLower(); context.SubmitChanges(); // ASP.NET Issues a cookie with the user name. // When a request is made with the specified cookie,// ASP.NET creates a row in aspnet_users table. // To prevent this sign out the user and then sign it in string cookieName = FormsAuthentication.FormsCookieName; HttpCookie authCookie = HttpContext.Current.Request.Cookies[cookieName]; FormsAuthenticationTicket authTicket = null; try { authTicket = FormsAuthentication.Decrypt(authCookie.Value); FormsIdentity formsIdentity = new FormsIdentity( new FormsAuthenticationTicket( authTicket.Version,newUserName,authTicket.IssueDate,authTicket.Expiration,authTicket.IsPersistent,authTicket.UserData)); string y = HttpContext.Current.User.Identity.Name; string[] roles = authTicket.UserData.Split(new char[] { '|' }); System.Security.Principal.GenericPrincipal genericPrincipal = new System.Security.Principal.GenericPrincipal( formsIdentity,roles); HttpContext.Current.User = genericPrincipal; } catch (ArgumentException ex) { // Handle exceptions } catch( NullReferenceException ex) { // Handle exceptions } FormsAuthentication.SignOut(); HttpContext.Current.Session.Abandon(); FormsAuthentication.SetAuthCookie(newUserName,false); success = true; } } return success; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 我的Asp.Net MVC 3站点中的奇怪错误
- asp.net – 正确设置需要粘性会话的负载均衡网络?
- ASP.NET Core 2.0仅在共享文件夹中查找视图
- asp.net-mvc-2 – 什么是Html.Validate和Html.ValidateFor方
- asp.net-mvc – 我为什么要测试我的HTMLHelpers?
- ASP.Net购物车应用
- asp.net – IIS 7.5上的ReportViewer 10.0无法呈现
- asp.net-mvc – 如何在ChildAction上删除OutputCache?
- asp.net-mvc – 用于移动设备的displaymode,带有桌面视图,适
- Asp.Net MVC EnableClientValidation不起作用
推荐文章
站长推荐
- asp.net – 如何将ApplicationDbContext从Owin管
- asp.net-mvc – Razor不会在HiddenFor中呈现隐藏
- asp.net-membership – 将ASP.NET成员资格提供程
- asp.net-mvc – 如何在razor视图中公开全局对象像
- asp.net – 如何防止超链接链接
- asp.net-mvc-4 – 找不到布局页面
- ASP.NET – 控制事件不在Repeater内部触发
- entity-framework – 实体类型没有键定义的EF6
- 如何在服务器控件属性中使用ASP.NET <%=标签?
- asp.net mvc 之旅—— 第三站 路由模板中强大的
热点阅读