Professional Documents
Culture Documents
NET
Accueil Obtenir commenc Apprendre Hbergement Tlchargements Communaut Forums Aide
Ce didacticiel vous montre comment construire une application de web dASP.NET MVC 5 avec confirmation par email et mot de passe
rinitialiser en utilisant le systme dappartenance identit ASP.NET. Vous pouvez tlcharger la demande remplie ici
(http://code.msdn.microsoft.com/MVC-5-with-2FA-email-8f26d952) . Le tlchargement contient des assistants dbogage qui vous
permettent de tester la confirmation par e-mail et SMS sans mise en place dun e-mail ou le fournisseur SMS.
AVERTISSEMENT: Vous devez installer Visual Studio 2013 Update 3 (http://go.microsoft.com/fwlink/?LinkId=390465) ou suprieur pour
effectuer ce didactiel.
1. Crez un projet Web ASP.NET et slectionnez le modle MVC. Web Forms prend galement en charge lidentit ASP.NET, alors vous pouvez suivre
les mmes tapes dans une application de formulaires web.
2. Laissez lauthentification par dfaut Des comptes dutilisateurs individuels. Si vous souhaitez hberger lapplication dans Azure, laissez la case
cocher active. Plus tard dans le tutoriel, nous allons dployer sur Azure. Vous pouvez ouvrir un compte Azure gratuitement
(http://azure.microsoft.com/en-us/pricing/free-trial/?WT.mc_id=A261C142F) .
6. Faites un clic droit sur la table AspNetUsers , puis slectionnez Afficher les donnes de Table.
Email de confirmation
Il est recommand de confirmer lemail dun nouvel enregistrement dutilisateur pour vrifier quils ne sont pas passer pour quelqu'un dautre
(autrement dit, ils nont pas enregistr avec email de quelqu'un dautre). Supposons que vous avez eu un forum de discussion, vous souhaiteriez afin
dempcher lenregistrement en tant que "joe@contoso.com" "bob@example.com" . Sans confirmation par e-mail, "joe@contoso.com" pouvaient
obtenir des courriels non dsirs de votre App. Supposons que Bob accidentellement enregistr comme "bib@example.com" et navait pas remarqu, il
ne serait pas capable dutiliser le mot de passe rcuprer car lapplication na pas son e-mail correcte. Email de confirmation prvoit quune protection
limite contre et ne fournit pas de protection de spammers dtermins, ils ont plusieurs alias de-mail de travail qu'ils peuvent utiliser pour sinscrire.
En gnral, vous souhaitez empcher les nouveaux utilisateurs de publier toutes les donnes de votre site web avant quils aient t confirmes par
courriel, un message texte SMS ou tout autre mcanisme. Dans les sections qui suivent, nous permettent demail de confirmation et modifier le code
afin dempcher les nouveaux utilisateurs enregistrs douvrir une session tant que leur e-mail a t confirme.
Brancher SendGrid
Bien que ce tutoriel montre seulement lajout de notification par e-mail via SendGrid (http://sendgrid.com/) , vous pouvez envoyer des e-mails laide
de SMTP et autres mcanismes (voir ressources supplmentaires (#addRes) ).
using SendGrid;
using System.Net;
using System.Configuration;
using System.Diagnostics;
Pour simplifier cet exemple, nous stockerons les paramtres dapplication dans le fichier web.config :
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<!-- Markup removed for clarity. -->
Remarque sur la scurit: Ne jamais stocker des donnes sensibles dans votre code source. Le compte et les informations
didentification sont stockes dans lappSetting. Sur Azure, vous pouvez solidement stocker ces valeurs dans longlet configurer
(http://blogs.msdn.com/b/webdev/archive/2014/06/04/queuebackgroundworkitem-to-reliably-schedule-and-run-long-background-process-
in-asp-net.aspx) dans le portail Azure. Voir mthodes conseilles pour le dploiement de mots de passe et autres donnes sensibles
ASP.NET et dAzur (/identity/overview/features-api/best-practices-for-deploying-passwords-and-other-sensitive-data-to-aspnet-
and-azure) .
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
Vrifier que le fichier Views\Account\ConfirmEmail.cshtml possde la syntaxe razor correct. (Le @ caractre dans la premire ligne est peut-tre
manquant.)
@{
ViewBag.Title = "Confirm Email";
}
<h2>@ViewBag.Title.</h2>
<div>
<p>
Thank you for confirming your email. Please @Html.ActionLink("Click here to Log in", "Login", "Account",
routeValues: null, htmlAttributes: new { id = "loginLink" })
</p>
</div>
Excuter lapplication, puis cliquez sur le lien dinscription. Une fois que vous soumettez le formulaire dinscription, vous tes connect.
Vrifiez votre compte de messagerie et cliquez sur le lien pour confirmer votre e-mail.
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Comment the following line to prevent log in until the user is confirmed.
// await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
return View("Info");
//return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
En formulant des observations sur la mthode SignInAsync , lutilisateur ne sera pas sign lenregistrement. Le
TempData["ViewBagLink"] = callbackUrl;
ligne peut tre utilis pour dboguer lapplication (#dbg) et test denregistrement sans envoyer de courriel. ViewBag.Message est utilis pour afficher
les instructions de la confirmer. Le Tlchargez exemple (http://code.msdn.microsoft.com/MVC-5-with-2FA-email-8f26d952) contient le code pour tester
la confirmation par e-mail sans configurer e-mail et peut galement tre utilis pour dboguer lapplication.
@{
ViewBag.Title = "Info";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
[Authorize]
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// Require the user to have a confirmed email before they can log on.
var user = await UserManager.FindByNameAsync(model.Email);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
ViewBag.errorMessage = "You must have a confirmed email to log on.";
return View("Error");
}
}
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h1 class="text-danger">Error.</h1>
@{
if (String.IsNullOrEmpty(ViewBag.errorMessage))
{
<h2 class="text-danger">An error occurred while processing your request.</h2>
}
else
{
<h2 class="text-danger">@ViewBag.errorMessage</h2>
}
}
Supprimer tous les comptes dans la table AspNetUsers contient lalias de messagerie avec que vous souhaitez tester. Excuter lapplication et vrifiez
que vous ne pouvez pas vous connecter jusqu' ce que vous avez confirm votre adresse e-mail. Une fois que vous confirmez votre adresse de courriel,
cliquez sur le lien Contact .
//
// POST: /Account/ForgotPassword
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByNameAsync(model.Email);
if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
{
// Don't reveal that the user does not exist or is not confirmed
return View("ForgotPasswordConfirmation");
}
@using MvcPWy.Models
@model LoginViewModel
@{
ViewBag.Title = "Log in";
}
<h2>@ViewBag.Title.</h2>
<div class="row">
<div class="col-md-8">
<section id="loginForm">
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new {
@class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Use a local account to log in.</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Log in" class="btn btn-default" />
</div>
</div>
<p>
@Html.ActionLink("Register as a new user", "Register")
</p>
@* Enable this once you have account confirmation enabled for password reset functionality *@
<p>
@Html.ActionLink("Forgot your password?", "ForgotPassword")
</p>
}
</section>
</div>
<div class="col-md-4">
<section id="socialLoginForm">
@Html.Partial("_ExternalLoginsListPartial", new ExternalLoginListViewModel { ReturnUrl = ViewBag.ReturnUrl })
</section>
</div>
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
return callbackUrl;
}
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Comment the following line to prevent log in until the user is confirmed.
// await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
ViewBag.Message = "Check your email and confirm your account, you must be confirmed "
+ "before you can log in.";
return View("Info");
//return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
Mettre jour la mthode Login pour renvoyer le mot de passe lorsque si le compte dutilisateur na pas t confirm:
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// Require the user to have a confirmed email before they can log on.
// var user = await UserManager.FindByNameAsync(model.Email);
var user = UserManager.Find(model.Email, model.Password);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account-Resend");
Cliquez sur le lien dans un autre journal service et accepter les demandes dapp. Les deux comptes ont t combines, vous serez en mesure douvrir
une session avec un compte. Vous voudrez peut-tre vos utilisateurs pour ajouter les comptes locaux, dans le cas o leur journal social au service
dauthentification est en panne, ou plus probablement ils ont perdu laccs leur compte social.
Limage suivante, Tom est un journal social dans (dont vous pouvez le voir sur la Logins externes: 1 montr sur la page).
En cliquant sur choisir un mot de passe vous permet dajouter un journal local sur associ au mme compte.
Dbogage de lapplication
Si vous ne recevez pas un email contenant le lien:
Ressources supplmentaires
Liens vers lidentit ASP.NET ressources recommandes (/identity/overview/getting-started/aspnet-identity-recommended-resources)
Confirmation de compte et mot de passe rcupration avec lidentit ASP.NET (/identity/overview/features-api/account-confirmation-
and-password-recovery-with-aspnet-identity) Va dans les dtails sur confirmation mot de passe de rcupration et compte.
MVC 5 App avec Facebook, Twitter, LinkedIn et Google OAuth2 Sign-on (/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-
and-google-oauth2-and-openid-sign-on) Ce tutoriel vous montre comment crire une application ASP.NET MVC 5 avec autorisation de Facebook et
Google OAuth 2. Il montre galement comment ajouter des donnes supplmentaires la base de donnes de lidentit.
Dployer une application de scurit ASP.NET MVC avec adhsion, OAuth et base de donnes SQL Azure (http://www.windowsazure.com
/en-us/develop/net/tutorials/web-site-with-sql-database/) . Ce tutoriel ajoute Azure dploiement, comment scuriser votre application avec des
rles, comment utiliser les membres API pour ajouter des utilisateurs et des rles et des fonctions de scurit supplmentaires.
Cration dune application Google pour 2 OAuth et connecter lapplication au projet (/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-
facebook-and-google-oauth2-and-openid-sign-on#goog)
Informations de lauteur
Rick Anderson Rick Anderson travaille comme programmeur rdacteur pour Microsoft, en se concentrant sur ASP.NET MVC,
Windows Azure et Entity Framework. Vous pouvez le suivre sur twitter via @RickAndMSFT.
Commentaires
(116)
Ce site est gr pour Microsoft par Neudesic, LLC. | Microsoft 2016. Tous droits rservs.