Identity Account controller example
public class Startup
{
public Startup()
{
var builder = new ConfigurationBuilder().
AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public IConfiguration Configuration { get; set; }
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<OdeToFoodDbContext>();
services.AddDbContext<OdeToFoodDbContext>(opt => opt.UseSqlServer(Configuration["database:connection"]));
services.AddScoped<IRestaurantData, SqlRestaurantData>();
services.AddMvc();
services.AddSingleton(iServiceProvicer => Configuration);
services.AddSingleton<IGreeter, Greeter>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory,IGreeter greeter)
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStatusCodePages();
app.UseFileServer();
app.UseIdentity();
app.UseMvc(configureRoutes);
app.Run(async (context) =>
{
var greeting = greeter.GetGreeting();
await context.Response.WriteAsync(greeting);
});
}
private void configureRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
}
}
{
"greeting": "A configurable hello, to you!",
"database": {
"connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=OdeToFood;"
}
}
public class AccountController:Controller
{
private UserManager<User> _userManager;
private SignInManager<User> _signInManager;
public AccountController(UserManager<User> userManager,SignInManager<User> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[HttpGet]
public ViewResult Register()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new User { UserName = model.Username };
var result=await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, false);
return RedirectToAction("Index", "Home");
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
}
}
return View(model);
}
}
@model RegisterViewModel
@{
ViewBag.Title = "Register";
}
<h1>Register</h1>
<form method="post" asp-action="Register" asp-controller="Account">
<div asp-validation-summary="ModelOnly"></div>
<div>
<label asp-for="Username"></label>
<input asp-for="Username"/>
<span asp-validation-for="Username"></span>
</div>
<div>
<label asp-for="Password"></label>
<input asp-for="Password" />
<span asp-validation-for="Password"></span>
</div>
<div>
<label asp-for="ConfirmPassword"></label>
<input asp-for="ConfirmPassword" />
<span asp-validation-for="ConfirmPassword"></span>
</div>
<div>
<input type="submit" value="Register"/>
</div>
</form>
using System.ComponentModel.DataAnnotations;
namespace OdeToFood.ViewModels
{
public class RegisterViewModel
{
[Required,MaxLength(256)]
public string Username { get; set; }
[Required,DataType(DataType.Password)]
public string Password { get; set; }
[Required,DataType(DataType.Password), Compare(nameof(Password))]
public string ConfirmPassword { get; set; }
}
}
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace OdeToFood.Entities
{
public class OdeToFoodDbContext:IdentityDbContext<User>
{
public OdeToFoodDbContext(DbContextOptions<OdeToFoodDbContext> options):base(options)
{
}
public DbSet<Restaurant> Restaurants{ get; set; }
}
}