2017-08-14 8 views
0
public static IdentityBuilder AddCustomPasswordValidator<TUser>(this IdentityBuilder builder, PasswordValidateOptions options) where TUser : class 
    { 

     if (!options.EmailInPassword) 
      builder.AddPasswordValidator<EmailInPasswordValidator>(); 
     if (!options.UserNameInPassword) 
      builder.AddPasswordValidator<UserNameInPasswordValidator>(); 
     if (!options.LastPasswordsInPassword) 
      builder.AddPasswordValidator<LastPasswordsInPasswordValidator>();  
     return builder ; 

    } 

上記の方法では、IPasswordvalidator実装にpropまたはコンストラクタを介して引数を渡すことはできません。コンフィグレーションに基づいてコアaspnet IDパスワードバリデーター

たとえばLastPasswordValidatorのように、オプションからのパスワードの数はカウントされますが、AddPasswordValidatorはデータを取得しません。

public class LastPasswordsInPasswordValidator:IPasswordValidator<ApplicationUser> 
{ 



    private int LastPasswordsCount { get; set; } 

    public LastPasswordsInPasswordValidator(IPasswordHasher<ApplicationUser> passwordHasher) 
    { 
     this.passwordHasher = passwordHasher; 
    } 
} 

これは私が

builder.AddPasswordValidator<LastPasswordsInPasswordValidator>(options);  

にしたいものですが、AddPasswordValidatorには、過負荷を持っていません。!!!

+1

バリデータコンストラクタへの依存としてオプションを注入しようとしましたか? – Brad

+0

@ブラッド、試しましたが、同じです。私は、コンストラクタのパラメータで汎用型を受け入れるために、IdentityBuilder.AddPasswordValidatorメソッドをオーバーライドする必要があると思います。そのアイデンティティベースクラスのため、私は本当にわかりません。[private PasswordValidateOptions PasswordValidateOptions {get;セット; } パブリックLastPasswordsInPasswordValidator(IOptions オプション) { this.PasswordValidateOptions = options.Value; }] – Jay

+0

このように、タイプに沿ってデータを渡す方法 – Jay

答えて

0

スタートアップサービスを構成します。

Ioptionsパターン作られた生活が容易、++コアデザインパターン 我々はアプリケーション間でデータを必要なときの特性/コンストラクタを介してデータを渡す必要はありません、IoptionsはIpasswordValidator

のあなた

services.Configure<PasswordValidateOptions>(Configuration.GetSection("PasswordValidateOptions")); 

実装のためにそれを保持します

private PasswordValidateOptions PasswordValidateOptions { get; set; } 
     public LastPasswordsInPasswordValidator(IOptions<PasswordValidateOptions> options) 
     { 
      this.PasswordValidateOptions = options.Value; 
     } 
+0

私のコメントは、あなたが働いていないと言ったので実装されました。面白い。 – Brad

+0

@ブラッド、その提案は素晴らしかった、確かに試しましたが、コードに他の依存関係があったために私は問題を別の視点で見ていたので、私は焦点をシフトさせました。私がコアIoptionsパターンを再訪したとき、それが見つかって、私が基本的な点を見逃していたことを理解しました。しかしトラックに戻る。あなたの提案は私のために働いた – Jay

関連する問題