asp.net - riesco - hashtag instagram 2018



È possibile cambiare il nome utente con l'API di appartenenza (5)

È vero che il provider di appartenenza SQL predefinito non consente modifiche al nome utente. Tuttavia, non esiste alcun motivo intrinseco per impedire agli utenti di modificare i loro nomi utente se hai un argomento valido, sul tuo sito, per consentirlo. Nessuna delle tabelle nel database SQL ha lo username come chiave, tutto è basato sull'ID dell'utente, quindi dal punto di vista dell'implementazione sarebbe abbastanza facile.

Sto usando il provider di appartenenza SQL predefinito con ASP.NET e vorrei fornire una pagina per cambiare il nome utente dell'utente. Credo di essere sicuro di poterlo fare con un fornitore personalizzato, ma è possibile farlo con il provider predefinito?

La seconda parte della mia domanda è: dovrei consentire agli utenti di cambiare il loro nome utente dopo che l'account è stato creato?


Ecco una versione che incorpora il DAB Librerie Enterprise e un paio di altre modifiche minori. Inoltre, non vedo un punto nel restituire un booleano, dal momento che ha esito positivo o genera un'eccezione.

        public static void 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.Equals(newUsername))
        {
            return;
        }

        Database db = DatabaseFactory.CreateDatabase();
        using (DbCommand cmd = db.GetSqlStringCommand("UPDATE dbo.aspnet_Users SET [email protected], [email protected] WHERE [email protected]"))
        {
            db.AddInParameter(cmd, "@OldUsername", DbType.String, oldUsername);
            db.AddInParameter(cmd, "@NewUsername", DbType.String, newUsername);
            db.AddInParameter(cmd, "@LoweredNewUsername", DbType.String, newUsername.ToLower());

            db.ExecuteNonQuery(cmd);                
        }
    }

Poiché l'API di Membershiop non consente direttamente la modifica del nome utente, è possibile accedere direttamente alla tabella aspnet_Membership nel proprio database.


Scott Mitchell ha un grande articolo che descrive come gestire questa situazione qui: http://www.4guysfromrolla.com/articles/070109-1.aspx

Citazione importante dal suo articolo:

Sfortunatamente, idealismo e pragmatismo raramente si intersecano. In alcuni casi, ad esempio consentendo a un utente di modificare il proprio nome utente, non abbiamo altra scelta che lavorare direttamente con l'archivio dati sottostante.

Mostra anche come autenticare di nuovo l'utente dopo aver cambiato nome utente / email.


Se si utilizza SqlMembershipProvider , è possibile estenderlo, ma si riferisce anche a questa domanda .
Roadkill è un motore wiki non una descrizione del mio stile di codifica.

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 [email protected],[email protected] WHERE [email protected]";

                    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;
                }
            }
        }
    }
}




sqlmembershipprovider