我在启动新的 ASP.NET 应用程序时遇到问题。我选择带有个人用户帐户身份验证的 asp.net mvc 模板,项目正常生成并启动。我的问题是:我需要做什么才能使用注册/登录选项?据我了解,负责这些操作的方法是自动生成的,但是我应该对有关用户信息的数据库模式做一些事情(它不应该也自动创建吗?)。
无论如何,在注册表单中填写字段后,我收到错误,无法找到文件,并且在第 155 行找到错误: var result = wait UserManager.CreateAsync(user, model.Password);
我正在 Windows 8 上使用 Visual Studio Community 2015。提前谢谢您
public async Task<IActionResult> Register(RegisterVM registerVM)
{
if (!ModelState.IsValid)
{
return View();
}
AppUser appUser = new AppUser()
{
Fullname = registerVM.Fullname,
UserName = registerVM.Username,
Email = registerVM.Email
};
IdentityResult result = await _userManager.CreateAsync(appUser, registerVM.Password);
if (!result.Succeeded)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
return View(registerVM);
}
await _userManager.AddToRoleAsync(appUser, Roless.Admin.ToString());
await _signInManager.SignInAsync(appUser, true);
return RedirectToAction("index", "home");
}
public IActionResult Login()
{
return View();
}
[HttpPost]
[AutoValidateAntiforgeryToken]
public async Task<IActionResult> Login(LoginVM loginVM, string returnurl)
{
if (!ModelState.IsValid)
{
return View();
}
AppUser dbUser = await _userManager.FindByEmailAsync(loginVM.Email);
if (dbUser == null)
{
ModelState.AddModelError("", "Ya email ya da Password sehvdir");
return View(loginVM);
}
SignInResult result = await _signInManager.PasswordSignInAsync(dbUser, loginVM.Password, loginVM.RememerMe, true);
if (result.IsLockedOut)
{
ModelState.AddModelError("", "Your Account Is Lock Out");
return View(loginVM);
}
if (!result.Succeeded)
{
ModelState.AddModelError("", "Ya Email ya da Password sehvdir");
return View(loginVM);
}
if (returnurl == null)
{
return RedirectToAction("index", "home");
}
foreach (var item in await _userManager.GetRolesAsync(dbUser))
{
if (item.Contains(Roless.Admin.ToString()))
{
return RedirectToAction("index", "Dashboard", new { area = "AdminF" });
}
}
return Redirect(returnurl);
}
namespace MultiShop.Controllers
{
public class AccountController(UserManager <AppUser> _userManager,SignInManager<AppUser> _signInManager) : Controller
{
public IActionResult Register()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Register(RegisterVM vm)
{
if (!ModelState.IsValid) { return View(vm); }
AppUser user = new AppUser
{
Email = vm.Email,
UserName = vm.Name,
Name = vm.Name,
Surname = vm.Surname,
};
IdentityResult result = await _userManager.CreateAsync(user,vm.Password);
if (!result.Succeeded) {
foreach (var error in result.Errors)
{
ModelState.AddModelError("",error.Description);
return View(vm);
}
};
return RedirectToAction(nameof(Index),"Home");
}
public async Task<IActionResult> Login()
{
return View();
}
public async Task<IActionResult> Login(AdminVM vm)
{
if (!ModelState.IsValid) { return View(vm); }
AppUser user=await _userManager.FindByNameAsync(vm.UsernameorEmail);
if (user == null) {
user =await _userManager.FindByEmailAsync(vm.UsernameorEmail);
if (user==null)
{
ModelState.AddModelError("","Istifadeci adi ve ya parol yalnisdir");
return View(vm);
}
}
user.AccessFailedCount++;
var result= await _signInManager.CheckPasswordSignInAsync(user, vm.Password,true);
if (result.IsLockedOut)
{
ModelState.AddModelError("", "Cox sayda yalnis parol gonderdiniz");
return View(vm);
}
return RedirectToAction(nameof(Index),"Home");
}
}
}
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddDbContext<MultiShopContext>();
builder.Services.AddIdentity<AppUser, IdentityRole>(opt =>
{
opt.User.RequireUniqueEmail = true;
opt.Password.RequiredLength = 3;
opt.Password.RequireNonAlphanumeric = false;
opt.Password.RequireDigit = false;
opt.Password.RequireLowercase = false;
opt.Password.RequireUppercase = false;
}
).AddEntityFrameworkStores<MultiShopContext>().AddDefaultTokenProviders();
var app = builder.Build();
app.UseStaticFiles();
app.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Slider}/{action=Index}/{id?}"
);
app.MapControllerRoute(
"default",
"{controller=Home}/{action=Index}"
);
app.Run();
}