2016-04-14 117 views
1

我見過很多示例,其中用戶確認註冊是通過使用通過WebSecurity生成的鏈接到簡單成員身份但爲了控制我自己的代碼生成的令牌完成的我已經寫了一個很多用戶註冊並從零開始使用數據庫訪問的實體框架登錄,而不是嘗試與繁瑣的自動生成的模板進行戰鬥,這些模板讓我無法瞭解正在發生的事情,並使我對正在發生的事情沒有信心。我必須誠實地說,我對他們的感受是,他們沒有展示任何代碼,以瞭解用戶db如何與我編寫的任何自定義函數進行交互。電子郵件確認Asp.net MVC

所以我的查詢是否有人使用自定義令牌進行電子郵件驗證,而不必先使用websecurity.CreateAccount方法?

我將不得不做一些重構已完美的聲音和功能的代碼,這將是一個恥辱。非常感謝提前

回答

2

有沒有人使用自定義令牌進行電子郵件驗證,而不必先使用websecurity.CreateAccount方法?

絕對 - 我們爲我們的所有電子郵件驗證令牌執行此操作,這是我們的「CreateAccount」流程的一部分。你可以做這樣的事情來生成令牌:

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); 
    } 
} 

然後我包括在我們的「CreateAccountResponse」,允許控制器把它撿起來,並與令牌發送確認電子郵件包括 - 給你一個理念:

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

    public string EmailVerificationToken { get; set; } 
} 

然後我們處理,在這裏:

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"); 
} 

然後使用令牌,我們創建了完全格式化的URL在電子郵件中包含您發送到本用戶

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)); 
    } 
} 

一旦他們點擊電子郵件中的鏈接,我們的「VerifyAccount」路線拿起令牌,使我們能夠完成驗證過程的其餘部分。

而且,這是一個很好主意設置一個到期您的驗證令牌用於安全目的 - 24到48小時的時間一般是在可接受的時間框架,以允許用戶接收的郵件,點擊鏈接,並驗證他們的帳戶。

+0

這是我正在尋找的澄清。非常感謝一家工廠。至少現在我知道我可以通過查看該模型在我的用戶表中存儲令牌。我所看到的例子完全忽略了我關於一些框架方法如何驗證和處理這樣的問題的更基本的問題。我認爲在這裏問這個問題的原因很可能是,我正在和另一位Java開發人員交談,有時寫邏輯邏輯並不是壞事,因爲你並不完全依賴於所有的框架方法,並且失去對我所做的事情的控制。非常感謝:) – Brian

+0

沒問題,很高興幫助。由於這回答了您的問題,您應該將其標記爲接受答案。 – X3074861X