2014-02-13 22 views
7

Ich verwende ASP.NET MVC5 und Identity 2.0 (Beta).Ändern Sie den Benutzernamen in MVC 5

Es ist für Benutzer möglich, den Benutzernamen zu ändern?

Ich versuche mit UserManager.UpdateAsync-Methode löst eine Ausnahme aus.

Fehler,

Fran.

+0

Was ist die Ausnahme, die ausgelöst wird? –

Antwort

-4

Vielleicht ist es nicht so schön, aber versuchen Sie dies:

db.Database.ExecuteSqlCommand("update AspNetUsers set UserName=" + NewUserName + " where UserName = " + OldUserName); 
+0

Dies ist fragil, da es direkt vom Datenbankschema und der Verbindung abhängt. Viel besser, den 'UserManger' zu verwenden, wie unten vorgeschlagen. –

+0

Ganz zu schweigen von dem Risiko der SQL-Injektion! – Epanoui

8

Ja, es ist möglich, die UpdateAsync Methode verwenden, aber Sie müssen sicherstellen, dass Sie beide aktualisieren, um die E-Mail und Benutzerfelder.

var user = userManager.FindById(userId); 
user.Email = email; 
user.UserName = email; 

var updateResult = await userManager.UpdateAsync(user); 

Diese Methode funktioniert für mich erfolgreich

1

Dies funktioniert für mich:

public async Task<ActionResult> ChangeUsername(string value) 
     { 
      if (UserManager.Users.Where(x => x.UserName == value).FirstOrDefault() == null) //chk for dupes 
      { 
       var user = UserManager.FindById(User.Identity.GetUserId()); 
       user.UserName = value; 
       var updateResult = await UserManager.UpdateAsync(user); 
       store.Context.SaveChanges(); 

       await SignInAsync(user,true);//user is cached until logout so do this to clear cache     
       return Content("true"); 
      } 
      throw new HttpException(500, "Please select a different username"); 
     }