2016-04-14 7 views
1

ich viele Beispiele gesehen haben, wo eine Registrierung Bestätigte Benutzer durch Verwendung eines Token generiert durch WebSecurity getan wird, die einfache Mitgliedschaft verbunden ist, sondern um die Kontrolle über meine eigenen Code zu nehmen habe ich schrieb ein Viele der Benutzerregistrierung und Logins von Grund auf mit Entity-Framework für den DB-Zugriff statt zu versuchen, gegen langweilige automatisch generierte Vorlagen zu kämpfen, die mir keine Aufschlüsselung geben, was vor sich geht und die mir kein Vertrauen geben, was vor sich geht. Ich muss ehrlich sein, so wie ich über sie fühle, da sie keinen Code zeigen, wie die Benutzer-db mit irgendeiner der benutzerdefinierten Funktionen interagiert, die ich schreibe.E-Mail Bestätigung Asp.net MVC

Also ist meine Abfrage hat jemand ein benutzerdefiniertes Token für die Validierung von E-Mails verwendet, die websecurity.CreateAccount-Methode nicht verwenden müssen?

Ich würde einige Refactoring für bereits perfekt Sound und Funktionscode tun müssen, wäre es eine Schande. Vielen Dank im Voraus

Antwort

2

Hat jemand ein benutzerdefiniertes Token für die E-Mail-Validierung verwendet, das die websecurity.CreateAccount-Methode nicht zuvor verwenden muss?

Absolut - wir tun dies für alle unsere E-Mail-Verifizierungstoken, die Teil unseres CreateAccount-Prozesses sind. Man könnte so etwas tun die Token zu generieren:

public static string GenerateEmailToken() 
{ 
    // generate an email verification token for the user 
    using (RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider()) 
    { 
     byte[] data = new byte[16]; 
     provider.GetBytes(data); 
     return Convert.ToBase64String(data); 
    } 
} 

ich gehört, dass, die in unserer „CreateAccountResponse“, das ermöglicht die Steuerung abholen und senden Sie die Bestätigungsmail mit dem Token dann - Sie geben ein Idee:

public class CreateAccountResponse 
{ 
    public bool CreatedSuccessfully { get; set; } 

    public string EmailVerificationToken { get; set; } 
} 

Und dann behandeln wir das hier:

CreateAccountResponse response = _mediator.Send(createAccountCommand); 

if (response.CreatedSuccessfully) 
{ 
    if (!string.IsNullOrEmpty(response.EmailVerificationToken)) 
    { 
     // Send the verification email if a token is present 
     SendVerificationEmail(model.Email, response.EmailVerificationToken); 
    }  

    return RedirectToAction("Settings", "Account"); 
} 

das Token dann verwendet wird, wir die vollständig formatierte URL erstellen, in der E-Mail senden Sie an diese schließen Benutzer

private void SendVerificationEmail(string emailAddress, string token) 
{ 
    try 
    { 
     // Url.Action will encode parameters as they are needed. 
     var verificationUrl = Url.Action("VerifyAccount", "Account", new { token = token }, Request.Url.Scheme); 
     _userMailer.DeliverVerification(emailAddress, verificationUrl); 
    } 
    catch (Exception ex) 
    { 
     _logger.ErrorLog.Log(new VerificationError(ex)); 
    } 
} 

Sobald sie den Link in der E-Mail klicken, unsere „VerifyAccount“ Route nimmt den Token und ermöglicht es uns, den Rest des Verifizierungsprozesses abzuschließen.

Außerdem ist es eine sehr gut Idee, einen Ablauf für Ihre Überprüfung Token für Sicherheitszwecke einstellen - 24 bis 48 Stunden in der Regel ein akzeptabler Zeitrahmen ist der Benutzer erhält die E-Mail, klicken Sie auf den Link, um zu ermöglichen, und verifiziere ihren Account.

+0

Dies ist die Klärung ich suchte. fantastisch dank einer Mühle. Zumindest jetzt weiß ich, dass ich ein Token mit meiner Benutzertabelle speichern kann, indem ich dieses Modell ansehe. Die Beispiele, die ich anschaue, übergehen alle grundlegenden Fragen, die ich habe, wie einige der Framework-Methoden solche Probleme validieren und behandeln. Der Grund, warum ich dachte, es wäre gut, hier zu fragen, war, dass ich mit einem anderen Entwickler in Java sprach, dass es manchmal nicht schadet, Cutom-Logik zu schreiben, damit Sie nicht vollständig von allen Framework-Methoden abhängig sind und die Kontrolle darüber verlieren . Vielen Dank :) – Brian

+0

Kein Problem, froh, dass geholfen hat. Da dies Ihre Frage beantwortet hat, sollten Sie sie als Angenommene Antwort markieren. – X3074861X