2017-05-21 65 views
1

我有一個WebApi項目與Cors的身份驗證令牌和SendGrid的電子郵件。我需要創建一個方法來發送電子郵件給用戶,以便他可以確認帳戶,問題是,我總是發現使用IDENTITY,並且是我沒有使用的東西。我發現這tutorial和這one,我試圖「適應」我的代碼,但它幾乎不可能,因爲它全部與身份。如何使用無身份證的WebApi添加帳戶確認

這是我有什麼..

啓動類:

public void ConfigureAuth(IAppBuilder app) 
    { 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

     // Ativar o método para gerar o OAuth Token 
     app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions() 
     { 
      TokenEndpointPath = new PathString("/Token"), 
      Provider = new ApplicationOAuthProvider(), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(300), 
      AllowInsecureHttp = true 
     }); 
    } 

而且我的供應商:

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext c) 
    { 
     try 
     { 
      using (var context = new CegonhaContext()) 
      { 
       var passValue = context.Users.Where(x => x.Email == c.UserName) 
        .Select(x => x.PasswordHash).FirstOrDefault(); 

       var exist = Hashing.ValidatePassword(c.Password, passValue);     

       if (exist) 
       { 
        Claim claim = new Claim(ClaimTypes.Name, c.UserName); 
        Claim[] claims = new Claim[] { claim }; 
        ClaimsIdentity claimsIdentity = new ClaimsIdentity(
         claims, OAuthDefaults.AuthenticationType); 
        c.Validated(claimsIdentity); 
       } 
       return Task.FromResult<object>(null); 
      } 
     } 
     catch (Exception) 
     { 
      return Task.FromResult<object>(null); 
     } 
    } 

我的型號表:

public partial class Users 
{ 
    [Key] 
    public int id_users { get; set; } 

    [StringLength(40)] 
    public string Email { get; set; } 

    public byte PhoneConfirmation { get; set; } 

    public string PasswordHash { get; set; } 

    public int LoginAttempt { get; set; } 

    [StringLength(10)] 
    public string UserProvider { get; set; } 

    public DateTime? Datepost { get; set; } 

    public int? EmailConfirmd { get; set; } 

    //public string Timepost { get; set; } 

    public int? id_users_data { get; set; } 

    public virtual Users_data Users_data { get; set; } 
} 

但我不知道如何實施nt電子郵件確認。

回答

1

你在代碼中試圖做的是自定義驗證,這就是爲什麼你不能使用身份的例子。這意味着你需要在你的應用程序中添加任何額外的邏輯來編程你自己。

這包括髮送自定義驗證電子郵件並處理用戶單擊驗證鏈接的後續操作。因爲您正在使用ASP.NET MVC,這意味着您可以創建一個處理驗證鏈接的操作。這意味着,當用戶想要註冊時,您會創建一封帶有鏈接的電子郵件(包含某種一次性令牌,請勿將其與OAUTH令牌混淆)。然後當用戶點擊這個鏈接時,一個asp.net mvc動作可以處理這個請求。

這給我帶回身份的例子。滾動您自己的登錄/驗證和身份驗證方法非常困難,容易出錯。這就是爲什麼在大多數時候使用像asp.net身份這樣的非自己的方法更好。

+0

謝謝,我設法創造了這樣的東西。 –

相關問題