2017-11-24 11 views
2

aspnet core identity2.0には、その電話番号でユーザを見つけるための方法はありますか? UserManagerはユーザー名と電子メールでユーザーを見つけることができますが、電話での検索やそれ以上の検索はなく、一般的なfind(Func<TUser, bool>)機能が提供されています。ユーザーが電話に登録するときは、2人のユーザーが電話を使用できないため、特定の電話番号が既に存在するかどうかを確認する必要があります。アイデンティティ・ユーザ・マネージャfind by phonenumber

編集

スタート認証コード:

services.AddIdentity<AccountUser, IdentityRole>() 
      .AddEntityFrameworkStores<AccountDbContext>() 
      .AddDefaultTokenProviders(); 
services.AddAuthentication().AddJwtBearer(...); 
+0

あなたのstartup.Authはどのように見えますか? OWINのコンポーネントをオーバーライドしていますか?そうでなければ、新しいカスタム 'UserStore'を作成し、' UserManager'でこれを新しいものにする必要があるでしょう。 – Liam

+0

私はOWINを使いませんでした。あなたはUserStoreについて詳しく説明できますか? – fluter

+0

今私はそれについて考える。なぜあなたはテーブルを直接照会しないのですか?あなたは、すべての認証コンポーネントを無効にするためにフープの負荷を乗り越えることができますが、実際にそのユーザー名が一意であるかどうかを知りたい場合は、データベースをチェックしますか? – Liam

答えて

0

あなたはユニークな電話番号を必要とする場合は、これを追加することにより、ApplicationDbContext(またはものは何でもIdentityDbContextとして使用されているコンテキスト)でこれを行うことができますこの方法は:あなたがSPEをした場合

protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items) 
{ 
    if (entityEntry != null && entityEntry.State == EntityState.Added) 
    { 
     var errors = new List<DbValidationError>(); 
     var user = entityEntry.Entity as ApplicationUser; 
     //check for uniqueness of phone number 
     if (user != null) 
     { 
      if (Users.Any(u => String.Equals(u.PhoneNumber, user.PhoneNumber))) 
      { 
       errors.Add(new DbValidationError("User",user.PhoneNumber+" is already registered.")); 
      } 
     } 
    } 
    return base.ValidateEntity(entityEntry, items); //check for uniqueness of user name and email and return result 
} 

継承base.ValidateEntity方法は、(ユーザー名とメールが一意であることを確認するためにチェックするものです設定でこれらのオプションが表示されます)。あなたはデータコンテキストへの直接アクセスを必要とする電話番号にアクセスするには:あなたが尋ねた正確な質問については

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.Validation; 
using System.Linq; 
using System.Security.Claims; 
using System.Threading.Tasks; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.EntityFramework; 

:あなたが必要なように見えるのステートメントを使用するための

。私が知る限り、UserManagerUserStoreでもこのようなメソッドを実装していませんが、UserStoreから継承した独自のユーザーストアクラスを定義して、そのようなメソッドを追加することはできます。

関連する問題