Skip to content

Commit f820e39

Browse files
committed
Added membership related things, controller and view messages are still in French. I'm gonna correct that later.
1 parent 72be9fc commit f820e39

File tree

10 files changed

+461
-15
lines changed

10 files changed

+461
-15
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
using System;
2+
using System.Web.Mvc;
3+
using System.Web.Security;
4+
using DevTrends.MvcDonutCaching.Demo.Models;
5+
6+
namespace DevTrends.MvcDonutCaching.Demo.Controllers
7+
{
8+
[Authorize]
9+
public class AccountController : Controller
10+
{
11+
//
12+
// GET: /Account/LogIn
13+
[AllowAnonymous]
14+
public ActionResult LogIn()
15+
{
16+
return View();
17+
}
18+
19+
//
20+
// POST: /Account/LogIn
21+
[AllowAnonymous, HttpPost]
22+
public ActionResult LogIn(LogOnModel model, string returnUrl)
23+
{
24+
if (ModelState.IsValid)
25+
{
26+
if (Membership.ValidateUser(model.UserName, model.Password))
27+
{
28+
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
29+
30+
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
31+
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
32+
{
33+
return Redirect(returnUrl);
34+
}
35+
36+
return RedirectToAction("Index", "Home");
37+
}
38+
39+
ModelState.AddModelError("", "Le nom d'utilisateur ou mot de passe fourni est incorrect.");
40+
}
41+
42+
// Si nous sommes arrivés là, quelque chose a échoué, réafficher le formulaire
43+
return View(model);
44+
}
45+
46+
//
47+
// GET: /Account/LogOut
48+
public ActionResult LogOut()
49+
{
50+
FormsAuthentication.SignOut();
51+
52+
return RedirectToAction("Index", "Home");
53+
}
54+
55+
//
56+
// GET: /Account/Register
57+
[AllowAnonymous]
58+
public ActionResult Register()
59+
{
60+
return View();
61+
}
62+
63+
//
64+
// POST: /Account/Register
65+
[AllowAnonymous, HttpPost]
66+
public ActionResult Register(RegisterModel model)
67+
{
68+
if (ModelState.IsValid)
69+
{
70+
// Tentative d'inscription de l'utilisateur
71+
MembershipCreateStatus createStatus;
72+
Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null,
73+
out createStatus);
74+
75+
if (createStatus == MembershipCreateStatus.Success)
76+
{
77+
FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
78+
return RedirectToAction("Index", "Home");
79+
}
80+
81+
ModelState.AddModelError("", ErrorCodeToString(createStatus));
82+
}
83+
84+
// Si nous sommes arrivés là, quelque chose a échoué, réafficher le formulaire
85+
return View(model);
86+
}
87+
88+
//
89+
// GET: /Account/ChangePassword
90+
public ActionResult ChangePassword()
91+
{
92+
return View();
93+
}
94+
95+
//
96+
// POST: /Account/ChangePassword
97+
[HttpPost]
98+
public ActionResult ChangePassword(ChangePasswordModel model)
99+
{
100+
if (ModelState.IsValid)
101+
{
102+
// ChangePassword lève une exception plutôt
103+
// que de retourner false dans certains scénarios de défaillance.
104+
bool changePasswordSucceeded;
105+
try
106+
{
107+
var currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
108+
changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
109+
}
110+
catch (Exception)
111+
{
112+
changePasswordSucceeded = false;
113+
}
114+
115+
if (changePasswordSucceeded)
116+
{
117+
return RedirectToAction("ChangePasswordSuccess");
118+
}
119+
120+
ModelState.AddModelError(
121+
"",
122+
"Le mot de passe actuel est incorrect ou le nouveau mot de passe n'est pas valide."
123+
);
124+
}
125+
126+
// Si nous sommes arrivés là, quelque chose a échoué, réafficher le formulaire
127+
return View(model);
128+
}
129+
130+
//
131+
// GET: /Account/ChangePasswordSuccess
132+
public ActionResult ChangePasswordSuccess()
133+
{
134+
return View();
135+
}
136+
137+
#region Status Codes
138+
139+
private static string ErrorCodeToString(MembershipCreateStatus createStatus)
140+
{
141+
// Consultez http://go.microsoft.com/fwlink/?LinkID=177550 pour
142+
// obtenir la liste complète des codes d'état.
143+
switch (createStatus)
144+
{
145+
case MembershipCreateStatus.DuplicateUserName:
146+
return "Le nom d'utilisateur existe déjà. Entrez un nom d'utilisateur différent.";
147+
148+
case MembershipCreateStatus.DuplicateEmail:
149+
return
150+
"Un nom d'utilisateur pour cette adresse de messagerie existe déjà. Entrez une adresse de messagerie différente.";
151+
152+
case MembershipCreateStatus.InvalidPassword:
153+
return "Le mot de passe fourni n'est pas valide. Entrez une valeur de mot de passe valide.";
154+
155+
case MembershipCreateStatus.InvalidEmail:
156+
return "L'adresse de messagerie fournie n'est pas valide. Vérifiez la valeur et réessayez.";
157+
158+
case MembershipCreateStatus.InvalidAnswer:
159+
return
160+
"La réponse de récupération du mot de passe fournie n'est pas valide. Vérifiez la valeur et réessayez.";
161+
162+
case MembershipCreateStatus.InvalidQuestion:
163+
return
164+
"La question de récupération du mot de passe fournie n'est pas valide. Vérifiez la valeur et réessayez.";
165+
166+
case MembershipCreateStatus.InvalidUserName:
167+
return "Le nom d'utilisateur fourni n'est pas valide. Vérifiez la valeur et réessayez.";
168+
169+
case MembershipCreateStatus.ProviderError:
170+
return
171+
"Le fournisseur d'authentification a retourné une erreur. Vérifiez votre entrée et réessayez. Si le problème persiste, contactez votre administrateur système.";
172+
173+
case MembershipCreateStatus.UserRejected:
174+
return
175+
"La demande de création d'utilisateur a été annulée. Vérifiez votre entrée et réessayez. Si le problème persiste, contactez votre administrateur système.";
176+
177+
default:
178+
return
179+
"Une erreur inconnue s'est produite. Vérifiez votre entrée et réessayez. Si le problème persiste, contactez votre administrateur système.";
180+
}
181+
}
182+
183+
#endregion
184+
}
185+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace DevTrends.MvcDonutCaching.Demo.Models
4+
{
5+
6+
public class ChangePasswordModel
7+
{
8+
[Required]
9+
[DataType(DataType.Password)]
10+
[Display(Name = "Mot de passe actuel")]
11+
public string OldPassword { get; set; }
12+
13+
[Required]
14+
[StringLength(100, ErrorMessage = "La chaîne {0} doit comporter au moins {2} caractères.", MinimumLength = 6)]
15+
[DataType(DataType.Password)]
16+
[Display(Name = "Nouveau mot de passe")]
17+
public string NewPassword { get; set; }
18+
19+
[DataType(DataType.Password)]
20+
[Display(Name = "Confirmer le nouveau mot de passe")]
21+
[System.Web.Mvc.Compare("NewPassword", ErrorMessage = "Le nouveau mot de passe et le mot de passe de confirmation ne correspondent pas.")]
22+
public string ConfirmPassword { get; set; }
23+
}
24+
25+
public class LogOnModel
26+
{
27+
[Required]
28+
[Display(Name = "Nom d'utilisateur")]
29+
public string UserName { get; set; }
30+
31+
[Required]
32+
[DataType(DataType.Password)]
33+
[Display(Name = "Mot de passe")]
34+
public string Password { get; set; }
35+
36+
[Display(Name = "Mémoriser le mot de passe ?")]
37+
public bool RememberMe { get; set; }
38+
}
39+
40+
public class RegisterModel
41+
{
42+
[Required]
43+
[Display(Name = "Nom d'utilisateur")]
44+
public string UserName { get; set; }
45+
46+
[Required]
47+
[DataType(DataType.EmailAddress)]
48+
[Display(Name = "Adresse de messagerie")]
49+
public string Email { get; set; }
50+
51+
[Required]
52+
[StringLength(100, ErrorMessage = "La chaîne {0} doit comporter au moins {2} caractères.", MinimumLength = 6)]
53+
[DataType(DataType.Password)]
54+
[Display(Name = "Mot de passe")]
55+
public string Password { get; set; }
56+
57+
[DataType(DataType.Password)]
58+
[Display(Name = "Confirmer le mot de passe")]
59+
[System.Web.Mvc.Compare("Password", ErrorMessage = "Le mot de passe et le mot de passe de confirmation ne correspondent pas.")]
60+
public string ConfirmPassword { get; set; }
61+
}
62+
}

DevTrends.MvcDonutCaching.Demo/MvcDonutCaching.Demo.csproj

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@
4040
<WarningLevel>4</WarningLevel>
4141
</PropertyGroup>
4242
<ItemGroup>
43+
<Reference Include="Artem.Web.Security">
44+
<HintPath>..\packages\Artem.XmlProviders40.4.0\lib\Artem.Web.Security.dll</HintPath>
45+
</Reference>
46+
<Reference Include="Artem.Web.Security.Xml">
47+
<HintPath>..\packages\Artem.XmlProviders40.4.0\lib\Artem.Web.Security.Xml.dll</HintPath>
48+
</Reference>
4349
<Reference Include="Autofac">
4450
<HintPath>..\packages\Autofac.3.1.1\lib\net40\Autofac.dll</HintPath>
4551
</Reference>
@@ -107,11 +113,13 @@
107113
<Reference Include="System.Xml.Linq" />
108114
</ItemGroup>
109115
<ItemGroup>
116+
<Compile Include="Controllers\AccountController.cs" />
110117
<Compile Include="Controllers\HomeController.cs" />
111118
<Compile Include="GlimpseSecurityPolicy.cs" />
112119
<Compile Include="Global.asax.cs">
113120
<DependentUpon>Global.asax</DependentUpon>
114121
</Compile>
122+
<Compile Include="Models\AccountModels.cs" />
115123
<Compile Include="Properties\AssemblyInfo.cs" />
116124
</ItemGroup>
117125
<ItemGroup>
@@ -129,10 +137,7 @@
129137
</Content>
130138
<Content Include="Views\Web.config" />
131139
</ItemGroup>
132-
<ItemGroup>
133-
<Folder Include="App_Data\" />
134-
<Folder Include="Models\" />
135-
</ItemGroup>
140+
<ItemGroup />
136141
<ItemGroup>
137142
<Content Include="packages.config">
138143
<SubType>Designer</SubType>
@@ -153,6 +158,18 @@
153158
<ItemGroup>
154159
<Content Include="Views\Shared\_Layout.cshtml" />
155160
</ItemGroup>
161+
<ItemGroup>
162+
<Content Include="Views\Account\Register.cshtml" />
163+
</ItemGroup>
164+
<ItemGroup>
165+
<Content Include="Views\Account\LogIn.cshtml" />
166+
</ItemGroup>
167+
<ItemGroup>
168+
<Content Include="Views\Account\ChangePasswordSuccess.cshtml" />
169+
</ItemGroup>
170+
<ItemGroup>
171+
<Content Include="Views\Account\ChangePassword.cshtml" />
172+
</ItemGroup>
156173
<PropertyGroup>
157174
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
158175
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
@model DevTrends.MvcDonutCaching.Demo.Models.ChangePasswordModel
2+
3+
@{
4+
ViewBag.Title = "Modifier le mot de passe";
5+
}
6+
7+
<h2>Modifier le mot de passe</h2>
8+
<p>
9+
Utilisez le formulaire ci-dessous pour changer votre mot de passe.
10+
</p>
11+
<p>
12+
Les nouveaux mots de passe doivent comporter au minimum @Membership.MinRequiredPasswordLength caractères.
13+
</p>
14+
15+
@using (Html.BeginForm())
16+
{
17+
@Html.ValidationSummary(true, "Échec de la modification du mot de passe. Corrigez les erreurs et réessayez.")
18+
<div>
19+
<fieldset>
20+
<legend>Informations de compte</legend>
21+
22+
<div class="editor-label">
23+
@Html.LabelFor(m => m.OldPassword)
24+
</div>
25+
<div class="editor-field">
26+
@Html.PasswordFor(m => m.OldPassword)
27+
@Html.ValidationMessageFor(m => m.OldPassword)
28+
</div>
29+
30+
<div class="editor-label">
31+
@Html.LabelFor(m => m.NewPassword)
32+
</div>
33+
<div class="editor-field">
34+
@Html.PasswordFor(m => m.NewPassword)
35+
@Html.ValidationMessageFor(m => m.NewPassword)
36+
</div>
37+
38+
<div class="editor-label">
39+
@Html.LabelFor(m => m.ConfirmPassword)
40+
</div>
41+
<div class="editor-field">
42+
@Html.PasswordFor(m => m.ConfirmPassword)
43+
@Html.ValidationMessageFor(m => m.ConfirmPassword)
44+
</div>
45+
46+
<p>
47+
<input type="submit" value="Modifier le mot de passe" />
48+
</p>
49+
</fieldset>
50+
</div>
51+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@{
2+
ViewBag.Title = "Modifier le mot de passe";
3+
}
4+
5+
<h2>Modifier le mot de passe</h2>
6+
<p>
7+
Votre mot de passe a été changé.
8+
</p>

0 commit comments

Comments
 (0)