Created
December 16, 2019 04:58
-
-
Save PadreSVK/49c2d4c30995f1af9dab215e4e54baea to your computer and use it in GitHub Desktop.
Login controller and views
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
using System; | |
using System.Linq; | |
using System.Security.Claims; | |
using System.Threading.Tasks; | |
using BL; | |
using DAL.Models.Identity; | |
using Microsoft.AspNetCore.Authentication; | |
using Microsoft.AspNetCore.Authentication.Cookies; | |
using Microsoft.AspNetCore.Authorization; | |
using Microsoft.AspNetCore.Identity; | |
using Microsoft.AspNetCore.Mvc; | |
using OpenWeather.ViewModels; | |
namespace OpenWeather.Controllers | |
{ | |
public class AccountController : Controller | |
{ | |
private readonly UserManager userManager; | |
private readonly SignInManager<User> signInManager; | |
public AccountController(UserManager userManager, SignInManager<User> signInManager) | |
{ | |
this.signInManager = signInManager; | |
this.userManager = userManager; | |
} | |
[HttpGet] | |
public IActionResult Login(string returnUrl = "/") | |
{ | |
ViewData["ReturnUrl"] = returnUrl; | |
return View(); | |
} | |
[HttpPost] | |
public async Task<IActionResult> Login(LoginViewModel vm, string returnUrl = null) | |
{ | |
if (ModelState.IsValid) | |
{ | |
try | |
{ | |
// Get user info from token | |
var result = await signInManager.PasswordSignInAsync(vm.EmailAddress, vm.Password, false, false); | |
if (result.Succeeded) | |
{ | |
var user = await userManager.FindByEmailAsync(vm.EmailAddress); | |
var roles = await userManager.GetRolesAsync(user); | |
var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new[] | |
{ | |
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), | |
new Claim(ClaimTypes.Name, user.UserName), | |
}.Concat(roles.Select(role => new Claim(ClaimTypes.Role, role)).ToArray()), | |
CookieAuthenticationDefaults.AuthenticationScheme)); | |
// Sign user into cookie middleware | |
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, | |
claimsPrincipal); | |
return RedirectToLocal(returnUrl); | |
} | |
} | |
catch (Exception e) | |
{ | |
ModelState.AddModelError("", e.Message); | |
} | |
} | |
return View(vm); | |
} | |
[Authorize] | |
public async Task<IActionResult> Logout() | |
{ | |
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); | |
return RedirectToAction(nameof(HomeController.Index), "Home"); | |
} | |
public IActionResult AccessDenied() | |
{ | |
return View(); | |
} | |
[Authorize] | |
public IActionResult Claims() | |
{ | |
return View(); | |
} | |
private IActionResult RedirectToLocal(string returnUrl) | |
{ | |
if (Url.IsLocalUrl(returnUrl)) | |
{ | |
return Redirect(returnUrl); | |
} | |
else | |
{ | |
return RedirectToAction(nameof(HomeController.Index), "Home"); | |
} | |
} | |
[Authorize(Roles = "Admin")] | |
public IActionResult SecretView() | |
{ | |
return View("OnlyForAdmin"); | |
} | |
} | |
} |
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
@model OpenWeather.ViewModels.LoginViewModel | |
@{ | |
ViewData["Title"] = "Log In"; | |
} | |
<div class="row"> | |
<div class="col-md-4 col-md-offset-4"> | |
<section> | |
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post"> | |
<h4>Log In</h4> | |
<hr /> | |
<div asp-validation-summary="All" class="text-danger"></div> | |
<div class="form-group"> | |
<label asp-for="EmailAddress"></label> | |
<input asp-for="EmailAddress" class="form-control input-lg" /> | |
<span asp-validation-for="EmailAddress" class="text-danger"></span> | |
</div> | |
<div class="form-group"> | |
<label asp-for="Password"></label> | |
<input asp-for="Password" class="form-control input-lg" /> | |
<span asp-validation-for="Password" class="text-danger"></span> | |
</div> | |
<div class="form-group"> | |
<button type="submit" class="btn btn-success btn-lg btn-block">Log in</button> | |
</div> | |
</form> | |
</section> | |
</div> | |
</div> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment