Use new login form
This commit is contained in:
@@ -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>
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user