Use new login form

This commit is contained in:
Sebastiaan Janssen
2016-09-06 19:57:47 +02:00
parent a37e33c9c2
commit fb0bb7f3ec
5 changed files with 150 additions and 1 deletions
+2
View File
@@ -1758,6 +1758,7 @@
<Content Include="Views\Community.cshtml" />
<Content Include="Views\Forum.cshtml" />
<None Include="Views\DocumentationSubpage.cshtml" />
<Content Include="Views\MacroPartials\Members\Login.cshtml" />
<None Include="Views\Partials\Forum\MemberBadge.cshtml" />
<Content Include="Views\Web.config" />
<Content Include="web.config">
@@ -4419,6 +4420,7 @@
<Content Include="Views\Release.cshtml" />
<Content Include="Views\Textpage.cshtml" />
<Content Include="Views\RoadMap.cshtml" />
<Content Include="Views\Partials\Members\Login.cshtml" />
<None Include="web.Debug.config">
<DependentUpon>web.config</DependentUpon>
</None>
@@ -0,0 +1,10 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@{
if (Members.IsLoggedIn())
{
Response.Redirect("/member/profile");
}
}
@Html.Action("Render", "Login")
@@ -0,0 +1,41 @@
@using OurUmbraco.Our.Controllers
@inherits UmbracoViewPage<Umbraco.Web.Models.LoginModel>
@{
Html.EnableClientValidation(true);
Html.EnableUnobtrusiveJavaScript(true);
}
<div class="form simpleForm" id="registrationForm">
@using (Html.BeginUmbracoForm<LoginController>("Login"))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<div class="profile-input" id="username">
<p>
@Html.LabelFor(m => m.Username)<br />
@Html.ValidationMessageFor(m => m.Username)
@Html.TextBoxFor(m => m.Username)
</p>
</div>
<div class="profile-input" id="password">
<p>
@Html.LabelFor(m => m.Password)<br />
@Html.ValidationMessageFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</p>
</div>
<input class="button green" type="submit" value="Log in">
}
</div>
<style type="text/css">
.field-validation-error, .validation-summary-errors {
color: red;
}
.input-validation-error {
border-color: red !important;
}
</style>
+71 -1
View File
@@ -1,11 +1,81 @@
using System.Web.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using OurUmbraco.Our.usercontrols;
using Umbraco.Core;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;
namespace OurUmbraco.Our.Controllers
{
public class LoginController: SurfaceController
{
[ChildActionOnly]
public ActionResult Render()
{
var loginModel = new LoginModel();
return PartialView("~/Views/Partials/Members/Login.cshtml", loginModel);
}
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid == false)
return CurrentUmbracoPage();
var memberService = Services.MemberService;
int totalMembers;
var members = memberService.FindByEmail(model.Username, 0, 100, out totalMembers).ToList();
if (totalMembers > 1)
{
var duplicateMembers = new List<DuplicateMember>();
foreach (var member in members)
{
var totalKarma = member.GetValue<int>("reputationTotal");
var duplicateMember = new DuplicateMember { MemberId = member.Id, TotalKarma = totalKarma };
duplicateMembers.Add(duplicateMember);
}
// rename username/email for each duplicate member
// EXCEPT for the one with the highest karma (Skip(1))
foreach (var duplicateMember in duplicateMembers.OrderByDescending(x => x.TotalKarma).ThenByDescending(x => x.MemberId).Skip(1))
{
var member = memberService.GetById(duplicateMember.MemberId);
var newUserName = member.Username.Replace("@", "@__" + member.Id);
member.Username = newUserName;
member.Email = newUserName;
memberService.Save(member, false);
}
}
var memberToLogin = memberService.FindByEmail(model.Username, 0, 1, out totalMembers).SingleOrDefault();
if (memberToLogin != null)
{
// Note: After July 23rd 2015 we need people to activate their accounts! Don't approve automatically
// otherwise:
// Automatically approve all members, as we don't have an approval process now
// This is needed as we added new membership after upgrading so IsApproved is
// currently empty. First time a member gets saved now (login also saves the member)
// IsApproved would turn false (default value of bool) so we want to prevent that
if (memberToLogin.CreateDate < DateTime.Parse("2015-07-23") && memberToLogin.Properties.Contains(Constants.Conventions.Member.IsApproved) && memberToLogin.IsApproved == false)
{
memberToLogin.IsApproved = true;
memberService.Save(memberToLogin, false);
}
}
if (Members.Login(model.Username, model.Password))
{
return Redirect("/");
}
ModelState.AddModelError("", "That username and password combination isn't valid here");
return CurrentUmbracoPage();
}
public ActionResult Logout()
{
FormsAuthentication.SignOut();
+26
View File
@@ -34,6 +34,7 @@ namespace OurUmbraco.Our
UseNewRegistrationForm();
AddStrictMinimumVersionForPackages();
AddSearchDocumentTypeAndPage();
UseNewLoginForm();
}
private void EnsureMigrationsMarkerPathExists()
@@ -585,5 +586,30 @@ namespace OurUmbraco.Our
LogHelper.Error<MigrationsHandler>(string.Format("Migration: '{0}' failed", migrationName), ex);
}
}
private void UseNewLoginForm()
{
var migrationName = MethodBase.GetCurrentMethod().Name;
try
{
var path = HostingEnvironment.MapPath(MigrationMarkersPath + migrationName + ".txt");
if (File.Exists(path))
return;
var macroService = UmbracoContext.Current.Application.Services.MacroService;
var macro = macroService.GetByAlias("MemberLogin");
macro.ControlType = "";
macro.ScriptPath = "~/Views/MacroPartials/Members/Login.cshtml";
macroService.Save(macro);
string[] lines = { "" };
File.WriteAllLines(path, lines);
}
catch (Exception ex)
{
LogHelper.Error<MigrationsHandler>(string.Format("Migration: '{0}' failed", migrationName), ex);
}
}
}
}