2008-10-28 23 views

cevap

1

Kodunuzun ASP.NET üzerinden oturum açmış bir kullanıcıya gerçekten ihtiyacı var mı, yoksa sadece bir CurrentPrincipal'a mı ihtiyacı var? Programlı olarak sitenize giriş yapmanız gerektiğini düşünmüyorum. Bir GenericPrincipal oluşturabilir, ihtiyacınız olan özellikleri ayarlayabilir ve örneğin Thread.CurrentPrincipal veya alaylı HttpContext öğesine ekleyebilirsiniz. Eğer kodunuz aslında RolePrincipal veya bir şeye ihtiyaç duyarsa, daha sonra ASP.NET üyeliğine daha az eşleşmesi için kodu değiştirirdim.

+0

Ben Membership.GetUser çağrısı gerek() kullanıcı şu anda oturum açmış dönmek için. – ddc0660

+2

Membership.GetUser() öğesini doğrudan test edilen sınıfta arama. Oluşturma sırasında bir IGetUser ile sınıfı tedarik edin, Membership.GetUser() yerine kullanın ve test için IGetUser'in sahte bir uygulamasını yapın. –

0

Üyelik Sağlayıcınızı kullanarak, Membership.ValidateUser kullanarak bir kullanıcıyı doğrulayabilirsiniz. Daha sonra FormsAuthentication.SetAuthCookie'yi kullanarak kimlik doğrulama çerezini ayarlayabilirsiniz. Bir çerez kabı olduğu sürece, bu bir kullanıcı oturum açmanıza izin vermelidir.

2

Thread.CurrentPrincipal ayarını ve sıfırlanmasını işleyen tek kullanımlık bir sınıf oluşturmak için en uygun yöntemi buldum. Test yönteminde

public class TemporaryPrincipal : IDisposable { 
     private readonly IPrincipal _cache; 

     public TemporaryPrincipal(IPrincipal tempPrincipal) { 
      _cache = Thread.CurrentPrincipal; 
      Thread.CurrentPrincipal = tempPrincipal; 
     } 

     public void Dispose() { 
      Thread.CurrentPrincipal = _cache; 
     } 
    } 

aynen bu şekilde bir using ifadesi ile çağrı sarın:

using (new TemporaryPrincipal(new AnonymousUserPrincipal())) { 
    ClassUnderTest.MethodUnderTest(); 
} 
13
if(Membership.ValidateUser("user1",[email protected])) 
     { 
      FormsAuthentication.SetAuthCookie("user1",true); 
} 
İlgili konular