Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to change the username with the Membership API

I am using the default sql membership provider with ASP.NET and I would like to provide a page to change the user's username. I believe I am sure I could do this with a custom provider, but can this be done with the default provider?

Second part of my question is: Should I allow users to change their username after the account is created?

like image 680
Bobby Ortiz Avatar asked Jun 16 '09 13:06

Bobby Ortiz


2 Answers

It's true that the default SQL Membership Provider does not allow username changes. However, there's no intrinsic reason to prevent users from changing their usernames if you have a valid argument, on your site, to allow it. None of the tables in the SQL database have the username as a key, everything is based on the user's ID, so from an implementation perspective it would be fairly easy.

like image 143
Jonathan Freeland Avatar answered Nov 08 '22 21:11

Jonathan Freeland


If you use SqlMembershipProvider, you can extend it - it also relates to this question.
Roadkill is a wiki engine not a description of my coding style.

using System; using System.Web.Security; using System.Configuration; using System.Data.SqlClient; using System.Data; using System.Web.Configuration;  namespace Roadkill.Core {     public class RoadkillMembershipProvider : SqlMembershipProvider     {         private string _connectionString;          protected string ConnectionString         {             get             {                 if (string.IsNullOrWhiteSpace(_connectionString))                 {                     Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");                     MembershipSection section = config.SectionGroups["system.web"].Sections["membership"] as MembershipSection;                     string defaultProvider = section.DefaultProvider;                     string connstringName = section.Providers[defaultProvider].ElementInformation.Properties["connectionStringName"].Value.ToString();                     _connectionString = config.ConnectionStrings.ConnectionStrings[connstringName].ConnectionString;                 }                  return _connectionString;             }         }          public bool ChangeUsername(string oldUsername, string newUsername)         {             if (string.IsNullOrWhiteSpace(oldUsername))                 throw new ArgumentNullException("oldUsername cannot be null or empty");              if (string.IsNullOrWhiteSpace(newUsername))                 throw new ArgumentNullException("newUsername cannot be null or empty");              if (oldUsername == newUsername)                 return true;              using (SqlConnection connection = new SqlConnection(ConnectionString))             {                 connection.Open();                  using (SqlCommand command = connection.CreateCommand())                 {                     command.CommandText = "UPDATE aspnet_Users SET UserName=@NewUsername,LoweredUserName=@LoweredNewUsername WHERE UserName=@OldUsername";                      SqlParameter parameter = new SqlParameter("@OldUsername", SqlDbType.VarChar);                     parameter.Value = oldUsername;                     command.Parameters.Add(parameter);                      parameter = new SqlParameter("@NewUsername", SqlDbType.VarChar);                     parameter.Value = newUsername;                     command.Parameters.Add(parameter);                      parameter = new SqlParameter("@LoweredNewUsername", SqlDbType.VarChar);                     parameter.Value = newUsername.ToLower();                     command.Parameters.Add(parameter);                      return command.ExecuteNonQuery() > 0;                 }             }         }     } } 
like image 23
Chris S Avatar answered Nov 08 '22 19:11

Chris S