2017-05-21 4 views
1

トークンによる認証と電子メール用のSendGridでCorsを持つWebApiプロジェクトがあります。私は彼がアカウントを確認できるようにユーザーに電子メールを送信する方法を作成する必要があります、問題は、私は常にIDENTITYを使用して見つかりましたと私は働いていないことです。私はこれを見つけましたtutorialとこのoneと私は自分のコードに "適応"しようとしていましたが、そのほとんどすべてがIDENTITYであるため不可能です。アイデンティティなしで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; } 
} 

しかし、私どのように実装するのか分かりません電子メールによる確認。

答えて

1

コードで実行しようとしているのはカスタム検証です。このため、ID例は使用できません。これは、アプリケーションに必要な余分なロジックが自分自身でプログラムしなければならないことを意味します。

これには、カスタム検証電子メールを送信し、検証リンクをクリックした後のユーザーの操作を処理することが含まれます。 ASP.NET MVCを使用しているので、検証リンクを処理するアクションを作成できます。これは、ユーザーがサインアップしたいときに、ある種のワンタイムトークンを含むリンクを含む電子メールを作成するときに、これをOAUTHトークンと混同しないでください。ユーザーがこのリンクをクリックすると、asp.net mvcアクションがこの要求を処理できます。

これはidentity.netの例を私に戻します。あなた自身のサインイン/検証と認証方法をローリングするのは間違いやすいです。これはasp.netのアイデンティティーのような自立していないメソッドを使用する方がずっと優れている理由です。

+0

ありがとう、私はこのようなものを作成することができました。 –

関連する問題