2016-03-01 126 views
2

我想更改MVC5 ASP.NET Application的默认注册操作。我的情况是,授权用户(如admin)将登录并且可以创建新用户。然而,使用下面的代码片段,创建用户后,当前登录用户将更改为注册用户。ASP.NET MVC5身份:避免在注册后更改登录用户

如何更改以下代码以避免更改登录用户?

// POST: /Account/Register 
[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Register(RegisterViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = new ApplicationUser() { UserName = model.UserName,Name=model.Name }; 
     var result = await UserManager.CreateAsync(user, model.Password); 
     if (result.Succeeded) 
     { 
      await SignInAsync(user, isPersistent: false); 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      AddErrors(result); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 
+1

注册用户在 “SignInAsync” 之称,因为后登录,其主要工作是登录用户..删除该行“SignInAsync”。 –

+1

您将需要一个单独的管理员操作,它不是'[AllowAnonymous]'并且检查该人员是admin;还传入两个用户名(管理员,新用户)。 – Jasen

回答

0

删除SignInAsync并添加[授权]注释:

[HttpPost] 
[Authorize] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Register(RegisterViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = new ApplicationUser() { UserName = model.UserName,Name=model.Name }; 
     var result = await UserManager.CreateAsync(user, model.Password); 
     if (result.Succeeded) 
     { 
      //await SignInAsync(user, isPersistent: false); 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      AddErrors(result); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 
1

只要做到这一点:

if (result.Succeeded) 
{ 
    if (!User.IsAuthenticated) // if they're already logged in, don't log in again 
     await SignInAsync(user, isPersistent: false); 
    return RedirectToAction("Index", "Home"); 
} 
相关问题