2016-05-18 16 views
2

サンプルWebアプリケーションを公開したいと思います。私は、新規ユーザーの登録を望んでいません。テスト目的でログインできる単一のユーザーを持つだけです。 LocalDbを持つアプリケーションに実行時のデフォルトのASP.NET IDモジュールが追加されています。Webアプリケーション(EF、ASP.NET ID、Azure)から登録を削除し、DBからユーザを登録してください

今、私はAzureに入れたいです。私は "Register"コントローラを削除するつもりでしたが、DBはEntity Frameworkによって自動的に作成されます。パスワードはDBに保存されているので、DB内からこの単一ユーザのパスワードを入力する方法はないようです。

私はこれをあまりにも複雑にしていることを知っています。コードでこれらの資格情報を保存しておく必要があります。このアプリケーションを保護することによる大きな利益はないのですが、既にこれを行っています。アイデアは、パスワードハッシュを克服するDB内からユーザー名とパスワードを作成するオプションがあるかどうか?

+1

私は質問を正しく理解しているかどうかはわかりませんが、Webアプリケーションの起動時にユーザーを確認して、それがまだ存在しない場合は作成してください。 –

+0

これは良いアイデアのように聞こえる! – Turo

+1

EFでCode Firstを使用している場合は、簡単にユーザーをシードできます。 –

答えて

1

このユーザーアカウントは、Entity Frameworkの移行、特にSeed(...)メソッドを使用して簡単にシードできます。移行で

を使用すると、次のラインに沿ってConfigurationクラスを作成することができ、有効:

public sealed class Configuration : DbMigrationsConfiguration<YourEFContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     ContextKey = "YourEFContext"; 
    } 

    /// <summary> 
    /// This method will be called after migrating to the latest version. 
    /// </summary> 
    /// <param name="context"></param> 
    protected override void Seed(YourEFContext context) 
    { 
     CreateUserIfNotExists(context, "[email protected]", "the_password"); 
    } 

    /// <summary> 
    /// Just call directly into ASP.Net Identity to check if the user exists 
    /// If not, create them 
    /// </summary> 
    private static void CreateUserIfNotExists(YourEFContext context, string email, string password) 
    { 
     // Use your application user class here 
     var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 

     // We're using email for the username 
     if ((um.FindByEmail(email)) == null) 
     { 
      var au = new ApplicationUser 
      { 
       UserName = email, 
       Email = email 
      }; 

      var res = um.Create(au); 

      if (res.Succeeded) 
      { 
       um.AddPassword(au.Id, password); 
      } 
      else 
      { 
       Console.WriteLine("Failed to create user: {0}", res.Errors.FirstOrDefault()); 
      } 
     } 
    } 
} 

Seed(...)は、すべての移行の最後に実行されますので、我々は、単に私達のユーザーが存在するかどうかを確認します存在しない場合は作成し、既知のパスワードを割り当てます。

+0

ブレンダンさん、ありがとう、私はこのシナリオを使用する場所、または非常によく似ていますが、SeedメソッドはIdentityからデフォルトで呼び出されるようではありません。私はGlobal.asaxからシードをセットアップする必要がありますか?Database.SetInitializer (new DbInitializer()); } 内部クラスDbInitializer:MigrateDatabaseToLatestVersion {} – Turo

+0

いいえ - 移行を実行すると、実行されます。したがって、パッケージマネージャコンソールから 'uodate-database'を実行した場合、または自動移行を設定した場合などです。グローバルからの実行は、AppPoolがリサイクルするたびに実行されます。 –

0

これは実際にはかなり簡単で、私はこれを前に必要としていました。デフォルトのセキュリティモジュールでできることがたくさんあり

if (!Roles.RoleExists("Administrator")) 
{ 
    Roles.CreateRole("Administrator"); 
} 

if (Membership.GetUser("Admin") == null) 
{ 
    Membership.CreateUser("Admin", "Password"); 
    Roles.AddUserToRole("Admin", "Administrator"); 
} 

:あなたは一つだけのユーザーをしたい場合は、あなたのGlobal.asaxApplication_Startでこれを置きます。詳細については、MSDNを参照してください。

+1

ありがとうManfred、あなたのソリューションはSimpleMembershipについてですが、私はIdentityを使用していますが、恐れています。 JamesBlondのヒントに基づいて、私は何をすべきか分かっていると思うので、私はこのユーザーにデータベースをシードする必要があります。 – Turo

関連する問題