committed by
GitHub
3 changed files with 140 additions and 52 deletions
@ -0,0 +1,41 @@ |
|||
@page |
|||
@model RegisterModel |
|||
@{ |
|||
ViewData["Title"] = "Register"; |
|||
} |
|||
|
|||
<div class="container"> |
|||
|
|||
<h2>@ViewData["Title"]</h2> |
|||
|
|||
<div class="row"> |
|||
<div class="col-md-8"> |
|||
<form asp-route-returnUrl="@Model.ReturnUrl" method="post"> |
|||
<h4>Create a new account.</h4> |
|||
<hr /> |
|||
<div asp-validation-summary="All" class="text-danger"></div> |
|||
<div class="form-group"> |
|||
<label asp-for="Input.Email"></label> |
|||
<input asp-for="Input.Email" class="form-control" /> |
|||
<span asp-validation-for="Input.Email" class="text-danger"></span> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label asp-for="Input.Password"></label> |
|||
<input asp-for="Input.Password" class="form-control" /> |
|||
<span asp-validation-for="Input.Password" class="text-danger"></span> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label asp-for="Input.ConfirmPassword"></label> |
|||
<input asp-for="Input.ConfirmPassword" class="form-control" /> |
|||
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span> |
|||
</div> |
|||
<button type="submit" class="btn btn-default">Register</button> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
@section Scripts { |
|||
<partial name="_ValidationScriptsPartial" /> |
|||
} |
|||
@ -0,0 +1,99 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.Text.Encodings.Web; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Authorization; |
|||
using Microsoft.AspNetCore.Identity; |
|||
using Microsoft.AspNetCore.Identity.UI.Services; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.AspNetCore.Mvc.RazorPages; |
|||
using Microsoft.eShopWeb.Infrastructure.Identity; |
|||
using Microsoft.Extensions.Logging; |
|||
|
|||
namespace Microsoft.eShopWeb.Web.Areas.Identity.Pages.Account |
|||
{ |
|||
[AllowAnonymous] |
|||
public class RegisterModel : PageModel |
|||
{ |
|||
private readonly SignInManager<ApplicationUser> _signInManager; |
|||
private readonly UserManager<ApplicationUser> _userManager; |
|||
private readonly ILogger<RegisterModel> _logger; |
|||
private readonly IEmailSender _emailSender; |
|||
|
|||
public RegisterModel( |
|||
UserManager<ApplicationUser> userManager, |
|||
SignInManager<ApplicationUser> signInManager, |
|||
ILogger<RegisterModel> logger, |
|||
IEmailSender emailSender) |
|||
{ |
|||
_userManager = userManager; |
|||
_signInManager = signInManager; |
|||
_logger = logger; |
|||
_emailSender = emailSender; |
|||
} |
|||
|
|||
[BindProperty] |
|||
public InputModel Input { get; set; } |
|||
|
|||
public string ReturnUrl { get; set; } |
|||
|
|||
public class InputModel |
|||
{ |
|||
[Required] |
|||
[EmailAddress] |
|||
[Display(Name = "Email")] |
|||
public string Email { get; set; } |
|||
|
|||
[Required] |
|||
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] |
|||
[DataType(DataType.Password)] |
|||
[Display(Name = "Password")] |
|||
public string Password { get; set; } |
|||
|
|||
[DataType(DataType.Password)] |
|||
[Display(Name = "Confirm password")] |
|||
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] |
|||
public string ConfirmPassword { get; set; } |
|||
} |
|||
|
|||
public void OnGet(string returnUrl = null) |
|||
{ |
|||
ReturnUrl = returnUrl; |
|||
} |
|||
|
|||
public async Task<IActionResult> OnPostAsync(string returnUrl = null) |
|||
{ |
|||
returnUrl = returnUrl ?? Url.Content("~/"); |
|||
if (ModelState.IsValid) |
|||
{ |
|||
var user = new ApplicationUser { UserName = Input.Email, Email = Input.Email }; |
|||
var result = await _userManager.CreateAsync(user, Input.Password); |
|||
if (result.Succeeded) |
|||
{ |
|||
_logger.LogInformation("User created a new account with password."); |
|||
|
|||
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); |
|||
var callbackUrl = Url.Page( |
|||
"/Account/ConfirmEmail", |
|||
pageHandler: null, |
|||
values: new { userId = user.Id, code = code }, |
|||
protocol: Request.Scheme); |
|||
|
|||
await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", |
|||
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); |
|||
|
|||
await _signInManager.SignInAsync(user, isPersistent: false); |
|||
return LocalRedirect(returnUrl); |
|||
} |
|||
foreach (var error in result.Errors) |
|||
{ |
|||
ModelState.AddModelError(string.Empty, error.Description); |
|||
} |
|||
} |
|||
|
|||
// If we got this far, something failed, redisplay form
|
|||
return Page(); |
|||
} |
|||
} |
|||
} |
|||
@ -1,52 +0,0 @@ |
|||
@model RegisterViewModel |
|||
@{ |
|||
ViewData["Title"] = "Register"; |
|||
} |
|||
<div class="brand-header-block"> |
|||
<ul class="container"> |
|||
<li class="active" style="margin-right: 65px;">Already have an account? <a asp-action="Signin">LOGIN</a></li> |
|||
</ul> |
|||
</div> |
|||
<div class="container account-login-container"> |
|||
<div class="row"> |
|||
<div class="col-md-12"> |
|||
<section> |
|||
<form asp-controller="Account" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal"> |
|||
<div asp-validation-summary="All" class="text-danger"></div> |
|||
<div class="form-group"> |
|||
<label asp-for="Email" class="col-md-2 control-label"></label> |
|||
<div class="col-md-10"> |
|||
<input asp-for="Email" class="form-control" /> |
|||
<span asp-validation-for="Email" class="text-danger"></span> |
|||
</div> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label asp-for="Password" class="col-md-2 control-label"></label> |
|||
<div class="col-md-10"> |
|||
<input asp-for="Password" class="form-control" /> |
|||
<span asp-validation-for="Password" class="text-danger"></span> |
|||
</div> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label asp-for="ConfirmPassword" class="col-md-2 control-label"></label> |
|||
<div class="col-md-10"> |
|||
<input asp-for="ConfirmPassword" class="form-control" /> |
|||
<span asp-validation-for="ConfirmPassword" class="text-danger"></span> |
|||
</div> |
|||
</div> |
|||
<div class="form-group"> |
|||
<button type="submit" class="btn btn-default btn-brand btn-brand-big"> REGISTER </button> |
|||
</div> |
|||
<p> |
|||
Note that for demo purposes you don't need to register! Use the credentials shown below the |
|||
<a asp-action="signin">login screen</a>. |
|||
</p> |
|||
</form> |
|||
</section> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
@section Scripts { |
|||
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } |
|||
} |
|||
Loading…
Reference in new issue