forked from rumkit/PhoneEdit
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Update PhoneBookContext.db * Update Create.cshtml * Update Delete.cshtml * Update Details.cshtml Co-Authored-By: akinin <[email protected]> * Update Edit.cshtml Co-Authored-By: akinin <[email protected]> * Update Index.cshtml Co-Authored-By: akinin <[email protected]> * Update _Layout.cshtml Co-Authored-By: akinin <[email protected]> * Update site.css Co-Authored-By: akinin <[email protected]> * Update PhoneBookController.cs Co-Authored-By: akinin <[email protected]> * Update PhonebookContext.cs Co-Authored-By: akinin <[email protected]> * Update IdentityContext.db Co-Authored-By: akinin <[email protected]> * Update PhoneEdit.csproj Co-Authored-By: akinin <[email protected]> * Update Program.cs Co-Authored-By: akinin <[email protected]> * Update Edit.cshtml Co-Authored-By: akinin <[email protected]> * Update Index action Co-Authored-By: akinin <[email protected]> * Update PhonebookContext.cs Co-Authored-By: akinin <[email protected]> * Create BookEntriesViewModel.cs Co-Authored-By: akinin <[email protected]> * Update PhoneEdit.csproj Co-Authored-By: akinin <[email protected]> * Update Program.cs Co-Authored-By: akinin <[email protected]> * Create PhoneBookService.cs Co-Authored-By: akinin <[email protected]> * Update Create.cshtml Co-Authored-By: akinin <[email protected]> * Update Edit.cshtml Co-Authored-By: akinin <[email protected]> * Update Index.cshtml Co-Authored-By: akinin <[email protected]> * Update _Layout.cshtml Co-Authored-By: akinin <[email protected]> * Scaffold Identity pages Co-Authored-By: akinin <[email protected]> --------- Co-authored-by: akinin <[email protected]>
- Loading branch information
Showing
24 changed files
with
1,244 additions
and
368 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
@page | ||
@model LoginModel | ||
|
||
@{ | ||
ViewData["Title"] = "Log in"; | ||
} | ||
|
||
<h1>@ViewData["Title"]</h1> | ||
<div class="row"> | ||
<div class="col-md-4"> | ||
<section> | ||
<form id="account" method="post"> | ||
<h2>Use a local account to log in.</h2> | ||
<hr /> | ||
<div asp-validation-summary="ModelOnly" class="text-danger" role="alert"></div> | ||
<div class="form-floating mb-3"> | ||
<input asp-for="Input.Email" class="form-control" autocomplete="username" aria-required="true" placeholder="[email protected]" /> | ||
<label asp-for="Input.Email" class="form-label">Email</label> | ||
<span asp-validation-for="Input.Email" class="text-danger"></span> | ||
</div> | ||
<div class="form-floating mb-3"> | ||
<input asp-for="Input.Password" class="form-control" autocomplete="current-password" aria-required="true" placeholder="password" /> | ||
<label asp-for="Input.Password" class="form-label">Password</label> | ||
<span asp-validation-for="Input.Password" class="text-danger"></span> | ||
</div> | ||
<div class="checkbox mb-3"> | ||
<label asp-for="Input.RememberMe" class="form-label"> | ||
<input class="form-check-input" asp-for="Input.RememberMe" /> | ||
@Html.DisplayNameFor(m => m.Input.RememberMe) | ||
</label> | ||
</div> | ||
<div> | ||
<button id="login-submit" type="submit" class="w-100 btn btn-lg btn-primary">Log in</button> | ||
</div> | ||
<div> | ||
<p> | ||
<a id="forgot-password" asp-page="./ForgotPassword">Forgot your password?</a> | ||
</p> | ||
<p> | ||
<a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> | ||
</p> | ||
<p> | ||
<a id="resend-confirmation" asp-page="./ResendEmailConfirmation">Resend email confirmation</a> | ||
</p> | ||
</div> | ||
</form> | ||
</section> | ||
</div> | ||
<div class="col-md-6 col-md-offset-2"> | ||
<section> | ||
<h3>Use another service to log in.</h3> | ||
<hr /> | ||
@{ | ||
if ((Model.ExternalLogins?.Count ?? 0) == 0) | ||
{ | ||
<div> | ||
<p> | ||
There are no external authentication services configured. See this <a href="https://go.microsoft.com/fwlink/?LinkID=532715">article | ||
about setting up this ASP.NET application to support logging in via external services</a>. | ||
</p> | ||
</div> | ||
} | ||
else | ||
{ | ||
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal"> | ||
<div> | ||
<p> | ||
@foreach (var provider in Model.ExternalLogins!) | ||
{ | ||
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button> | ||
} | ||
</p> | ||
</div> | ||
</form> | ||
} | ||
} | ||
</section> | ||
</div> | ||
</div> | ||
|
||
@section Scripts { | ||
<partial name="_ValidationScriptsPartial" /> | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
#nullable disable | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using System.ComponentModel.DataAnnotations; | ||
using System.Linq; | ||
using System.Threading.Tasks; | ||
using Microsoft.AspNetCore.Authorization; | ||
using Microsoft.AspNetCore.Authentication; | ||
using Microsoft.AspNetCore.Identity; | ||
using Microsoft.AspNetCore.Identity.UI.Services; | ||
using Microsoft.AspNetCore.Mvc; | ||
using Microsoft.AspNetCore.Mvc.RazorPages; | ||
using Microsoft.Extensions.Logging; | ||
|
||
namespace PhoneEdit.Areas.Identity.Pages.Account | ||
{ | ||
public class LoginModel : PageModel | ||
{ | ||
private readonly SignInManager<IdentityUser> _signInManager; | ||
private readonly ILogger<LoginModel> _logger; | ||
|
||
public LoginModel(SignInManager<IdentityUser> signInManager, ILogger<LoginModel> logger) | ||
{ | ||
_signInManager = signInManager; | ||
_logger = logger; | ||
} | ||
|
||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
[BindProperty] | ||
public InputModel Input { get; set; } | ||
|
||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
public IList<AuthenticationScheme> ExternalLogins { get; set; } | ||
|
||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
public string ReturnUrl { get; set; } | ||
|
||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
[TempData] | ||
public string ErrorMessage { get; set; } | ||
|
||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
public class InputModel | ||
{ | ||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
[Required] | ||
[EmailAddress] | ||
public string Email { get; set; } | ||
|
||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
[Required] | ||
[DataType(DataType.Password)] | ||
public string Password { get; set; } | ||
|
||
/// <summary> | ||
/// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used | ||
/// directly from your code. This API may change or be removed in future releases. | ||
/// </summary> | ||
[Display(Name = "Remember me?")] | ||
public bool RememberMe { get; set; } | ||
} | ||
|
||
public async Task OnGetAsync(string returnUrl = null) | ||
{ | ||
if (!string.IsNullOrEmpty(ErrorMessage)) | ||
{ | ||
ModelState.AddModelError(string.Empty, ErrorMessage); | ||
} | ||
|
||
returnUrl ??= Url.Content("~/"); | ||
|
||
// Clear the existing external cookie to ensure a clean login process | ||
await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); | ||
|
||
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); | ||
|
||
ReturnUrl = returnUrl; | ||
} | ||
|
||
public async Task<IActionResult> OnPostAsync(string returnUrl = null) | ||
{ | ||
returnUrl ??= Url.Content("~/"); | ||
|
||
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); | ||
|
||
if (ModelState.IsValid) | ||
{ | ||
// This doesn't count login failures towards account lockout | ||
// To enable password failures to trigger account lockout, set lockoutOnFailure: true | ||
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false); | ||
if (result.Succeeded) | ||
{ | ||
_logger.LogInformation("User logged in."); | ||
return LocalRedirect(returnUrl); | ||
} | ||
if (result.RequiresTwoFactor) | ||
{ | ||
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe }); | ||
} | ||
if (result.IsLockedOut) | ||
{ | ||
_logger.LogWarning("User account locked out."); | ||
return RedirectToPage("./Lockout"); | ||
} | ||
else | ||
{ | ||
ModelState.AddModelError(string.Empty, "Invalid login attempt."); | ||
return Page(); | ||
} | ||
} | ||
|
||
// If we got this far, something failed, redisplay form | ||
return Page(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
@page | ||
@model LogoutModel | ||
@{ | ||
ViewData["Title"] = "Log out"; | ||
} | ||
|
||
<header> | ||
<h1>@ViewData["Title"]</h1> | ||
@{ | ||
if (User.Identity?.IsAuthenticated ?? false) | ||
{ | ||
<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/", new { area = "" })" method="post"> | ||
<button type="submit" class="nav-link btn btn-link text-dark">Click here to Logout</button> | ||
</form> | ||
} | ||
else | ||
{ | ||
<p>You have successfully logged out of the application.</p> | ||
} | ||
} | ||
</header> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
#nullable disable | ||
|
||
using System; | ||
using System.Threading.Tasks; | ||
using Microsoft.AspNetCore.Authorization; | ||
using Microsoft.AspNetCore.Identity; | ||
using Microsoft.AspNetCore.Mvc; | ||
using Microsoft.AspNetCore.Mvc.RazorPages; | ||
using Microsoft.Extensions.Logging; | ||
|
||
namespace PhoneEdit.Areas.Identity.Pages.Account | ||
{ | ||
public class LogoutModel : PageModel | ||
{ | ||
private readonly SignInManager<IdentityUser> _signInManager; | ||
private readonly ILogger<LogoutModel> _logger; | ||
|
||
public LogoutModel(SignInManager<IdentityUser> signInManager, ILogger<LogoutModel> logger) | ||
{ | ||
_signInManager = signInManager; | ||
_logger = logger; | ||
} | ||
|
||
public async Task<IActionResult> OnPost(string returnUrl = null) | ||
{ | ||
await _signInManager.SignOutAsync(); | ||
_logger.LogInformation("User logged out."); | ||
if (returnUrl != null) | ||
{ | ||
return LocalRedirect(returnUrl); | ||
} | ||
else | ||
{ | ||
// This needs to be a redirect so that the browser performs a new | ||
// request and the identity for the user gets updated. | ||
return RedirectToPage(); | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.