せずにユーザーを保存します。Asp.Netアイデンティティは、私がこのように、電子メールせずにユーザーを保存したいメール
var user = new ApplicationUser { UserName = model.Name };
var result = await UserManager.CreateAsync(user);
しかし、私は、「メールがnullまたは空にすることはできません」エラーを得ました。これにはどんな解決策がありますか?それとも不可能ですか?
せずにユーザーを保存します。Asp.Netアイデンティティは、私がこのように、電子メールせずにユーザーを保存したいメール
var user = new ApplicationUser { UserName = model.Name };
var result = await UserManager.CreateAsync(user);
しかし、私は、「メールがnullまたは空にすることはできません」エラーを得ました。これにはどんな解決策がありますか?それとも不可能ですか?
IDは、ユーザーのパスワードをリセットする方法として電子メールによって異なります。
ただし、電子メールを無視するのは簡単ではありませんが、可能です。
namespace Microsoft.AspNet.Identity
{
/// <summary>
/// Used to validate an item
///
/// </summary>
/// <typeparam name="T"/>
public interface IIdentityValidator<in T>
{
/// <summary>
/// Validate the item
///
/// </summary>
/// <param name="item"/>
/// <returns/>
Task<IdentityResult> ValidateAsync(T item);
}
}
そしてApplicationUserManager
にプロパティUserValidator
に独自の実装を割り当てます。あなたは、電子メールの欠如を無視Microsoft.AspNet.Identity.IIdentityValidator
インタフェースを実装する必要があります。
Microsoft.AspNet.Identity.UserValidator
クラスを逆コンパイルして、既存のソースコードを参照して電子メールのチクチクを取り除いて、元のソースコードをUserValidator
にすることができます。
しかし、私はフレームワークの残りの部分がユーザーの電子メールの欠如にどのように反応するかはわかりません。他の操作で例外が発生する可能性があります。
私はこれが古いと知っていますが、質問にはasp.net-identity-2とタグ付けされているため、受け入れられた回答には同意しません。 、UserValidator<TUser>
で
public class ApplicationUserManager : UserManager<ApplicationUser>
{
...snip...
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
// This disables the validation check on email addresses
RequireUniqueEmail = false
};
...snip...
}
}
Task<IdentityResult> ValidateAsync(T item)
実装チェックこのフラグをし、それが電子メールの検証を実行する必要があるかどうかを判断:将来の読者の利益のために、ASP.NETアイデンティティ2.0は、この問題に非常に簡単な解決策を持っている
if (this.RequireUniqueEmail)
{
await this.ValidateEmail(item, list);
}
メールアドレスを持たないユーザーを保存したいので、これを行う必要があります。
注意:これは、電子メールアドレスが収集されない場合にのみ使用してください。電子メールアドレスを収集して検証するが、登録時にオプションにする場合は、IIdentityValidator
というカスタムを使用する必要があります。
ASPアイデンティティ2.2はApp_Start\IdentityConfig.cs
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = false
};
に設定することができます実際にはもっと良い方法があります。それを無視して、それが完了したら元に戻す必要があるときだけ検証を変更します。 (この場合、別のスレッドが更新(?)する必要があるため、非同期は使用しないでください)
// first create/update the identity!!!
user.PasswordHash = UserManager.PasswordHasher.HashPassword(model.Password); //hash and update directly
// alter
UserManager.UserValidator = new UserValidator<StoreUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = false
};
var result = UserManager.Update(user);
// restore...
UserManager.UserValidator = new UserValidator<StoreUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
さらにあなたのアバターのために1つ。 ...そして質問への正解、もちろん! :) –