2016-06-15 9 views
2

ASP.NET IDを使用してWebアプリケーションで許可と認証を有効にしようとしています。私はSignInManagerを使用しようとしていますが、PasswordSignInAsyncを呼び出すときにデータベースを探しています。テスト目的でメモリ内データ(たとえばユーザの集まり)で使用する方法はありますか?開発環境用のデータベースなしでSignInManagerを実装するにはどうすればよいですか?

私はデフォルトのApplicationUserクラス(Model)を使用しています。

public class ApplicationUser : IdentityUser 
{ 

    public Guid UserId { get; set; } 
    public string Name { get; set; } 
    public string Password { get; set; } 
} 

これはコントローラのLogin ActionResultメソッドです。

[HttpPost] 
public async Task<ActionResult> Login(LoginViewModel viewModel, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     var signInResult = await _signInManager.PasswordSignInAsync(viewModel.Email, viewModel.Password, 
                    true, false); 
     if (signInResult.Succeeded) 
      ...... 
    } 
} 

_signInManager.PasswordSignInAsyncコールは、データベースを検索し、私は別の何かをするために任意の有用な過負荷が表示されません。

+1

ことが可能であるため、以下のリンクを参照してください。 https://code.msdn.microsoft.com/Simple-Aspnet-Identiy-Core-7475a961 –

+1

メモリ内のデータを扱うには、独自のアイデンティティインターフェイスを実装する必要があります。ここでは[asp.net IDをカスタマイズする方法の例](http://www.asp.net/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity) –

+0

ありがとうございます。それが可能であることを知ることは素晴らしいことです。まず、@EddiePazが提供するソリューションを試してみましょう。そして、Bonによって与えられたドキュメントを読んで、ASP.NETアイデンティティについて学んでいきます。私はさらなる問題に遭遇すればもっと助けを得ることができると思う –

答えて

2

代わりにSignInAsyncメソッドを使用して、メモリにユーザーオブジェクトを作成すると、データベースに存在しないユーザーにサインインする次のコードが動作しました。

var appUser = new ApplicationUser 
{ 
    Id = 1, 
    UserName = viewModel.UserName, 
    Email = viewModel.UserName, 
    SecurityStamp = Guid.NewGuid().ToString() 
}; 
try 
{ 
    var userPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser); 
    foreach(var claim in userPrincipal.Claims) 
    { 
     appUser.Claims.Add(new ApplicationUserClaim { UserId = appUser.Id, ClaimType = claim.Type, ClaimValue = claim.Value }); 
    } 
    await _signInManager.SignInAsync(appUser, viewModel.RememberMe); 
    return RedirectToLocal(returnUrl); 
} 
catch (Exception ex) 
{ 
    // Log Exception 
    ModelState.AddModelError(string.Empty, "Invalid login"); 
    return View(); 
} 

他のオプションは、あなたなし永続性の記憶装置(例えばEF7インメモリデータベース)を使用するアイデンティティ・ストレージ・プロバイダーをカスタマイズすることです。

は、より多くの情報

identity-custom-storage-providers

関連する問題