Last active
August 31, 2022 03:05
-
-
Save AaronSadlerUK/7b1163a508b11bed9ae92fd87f4ca9a2 to your computer and use it in GitHub Desktop.
How to create member login and logout form in Umbraco V9 (RC)
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 Umbraco.Cms.Web.Common.Models.LoginModel | |
@using (Html.BeginUmbracoForm<MemberAuthenticationSurfaceController>("Login", FormMethod.Post)) | |
{ | |
@Html.LabelFor(m => m.Username) | |
@Html.TextBoxFor(m => m.Username, new { placeholder = "Username" }) | |
@Html.LabelFor(m => m.Password) | |
@Html.PasswordFor(m => m.Password, new { placeholder = "Password" }) | |
@Html.ValidationSummary() | |
<button name="login" type="submit">Login</button> | |
} |
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
<a href="@Url.SurfaceAction("Logout", "MemberAuthenticationSurface")">Logout</a> |
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.Threading.Tasks; | |
using Microsoft.AspNetCore.Mvc; | |
using Umbraco.Cms.Core.Cache; | |
using Umbraco.Cms.Core.Logging; | |
using Umbraco.Cms.Core.Routing; | |
using Umbraco.Cms.Core.Security; | |
using Umbraco.Cms.Core.Services; | |
using Umbraco.Cms.Core.Web; | |
using Umbraco.Cms.Infrastructure.Persistence; | |
using Umbraco.Cms.Web.Common.Models; | |
using Umbraco.Cms.Web.Common.Security; | |
using Umbraco.Cms.Web.Website.Controllers; | |
public class MemberAuthenticationSurfaceController : SurfaceController | |
{ | |
private readonly IMemberManager _memberManager; | |
private readonly IMemberSignInManager _memberSignInManager; | |
public MemberAuthenticationSurfaceController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, IProfilingLogger profilingLogger, IPublishedUrlProvider publishedUrlProvider, IMemberManager memberManager, IMemberSignInManager memberSignInManager) : base(umbracoContextAccessor, databaseFactory, services, appCaches, profilingLogger, publishedUrlProvider) | |
{ | |
_memberManager = memberManager; | |
_memberSignInManager = memberSignInManager; | |
} | |
[ValidateAntiForgeryToken] | |
[HttpPost] | |
public async Task<IActionResult> Login(LoginModel model, string returnUrl) | |
{ | |
if (ModelState.IsValid) | |
{ | |
if (await _memberManager.ValidateCredentialsAsync(model.Username, model.Password)) | |
{ | |
var result = await _memberSignInManager.PasswordSignInAsync(model.Username, model.Password, false, true); | |
if (result.Succeeded) | |
{ | |
if (Url.IsLocalUrl(returnUrl)) | |
{ | |
return Redirect(returnUrl); | |
} | |
return RedirectToCurrentUmbracoPage(); | |
} | |
} | |
else | |
{ | |
ModelState.AddModelError(string.Empty, "The username or password provided is incorrect."); | |
} | |
} | |
return CurrentUmbracoPage(); | |
} | |
[HttpGet] | |
public async Task<IActionResult> Logout() | |
{ | |
TempData.Clear(); | |
await _memberSignInManager.SignOutAsync(); | |
return RedirectToCurrentUmbracoPage(); | |
} | |
} |
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 Umbraco.Cms.Core.Security | |
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage | |
@inject IMemberManager _memberManager; | |
@if (_memberManager.IsLoggedIn()) | |
{ | |
@(await Component.InvokeAsync("ClientLogout")) | |
} | |
else | |
{ | |
@(await Component.InvokeAsync("ClientLogin")) | |
} |
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.Threading.Tasks; | |
using Microsoft.AspNetCore.Mvc; | |
using Umbraco.Cms.Web.Common.Models; | |
public class ClientLoginViewComponent : ViewComponent | |
{ | |
public async Task<IViewComponentResult> InvokeAsync() | |
{ | |
return View("~/Views/Partials/_Login.cshtml", new LoginModel()); | |
} | |
} |
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.Threading.Tasks; | |
using Microsoft.AspNetCore.Mvc; | |
public class ClientLogoutViewComponent : ViewComponent | |
{ | |
public async Task<IViewComponentResult> InvokeAsync() | |
{ | |
return View("~/Views/Partials/_Logout.cshtml"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment