Estoy tratando de probar un código de unidad que necesita un usuario actualmente conectado en la prueba. Al usar el Proveedor de Membresía .Net 2.0, ¿cómo puedo iniciar sesión programáticamente como usuario para esta prueba?inicio de sesión programático con el proveedor de membresía .net
Respuesta
¿Su código realmente necesita un usuario conectado a través de ASP.NET, o solo necesita un CurrentPrincipal? No creo que deba iniciar sesión programáticamente en su sitio. Puede crear un GenericPrincipal, establecer las propiedades que necesita y adjuntarlo, por ejemplo, Thread.CurrentPrincipal o un HttpContext falso. Si su código realmente necesita RolePrincipal o algo así, cambiaría el código para que esté menos acoplado a la membresía de ASP.NET.
Usando su proveedor de membresía puede validar a un usuario que usa Membership.ValidateUser. Luego puede establecer la cookie de autenticación usando FormsAuthentication.SetAuthCookie. Siempre que tenga un contenedor de cookies, esto debería permitirle iniciar sesión en un usuario.
He encontrado que es más conveniente crear una clase desechable que maneje la configuración y restablecimiento de Thread.CurrentPrincipal.
public class TemporaryPrincipal : IDisposable {
private readonly IPrincipal _cache;
public TemporaryPrincipal(IPrincipal tempPrincipal) {
_cache = Thread.CurrentPrincipal;
Thread.CurrentPrincipal = tempPrincipal;
}
public void Dispose() {
Thread.CurrentPrincipal = _cache;
}
}
En el método de prueba que acaba de envolver su llamada con una instrucción using así:
using (new TemporaryPrincipal(new AnonymousUserPrincipal())) {
ClassUnderTest.MethodUnderTest();
}
if(Membership.ValidateUser("user1",[email protected]))
{
FormsAuthentication.SetAuthCookie("user1",true);
}
- 1. Control de inicio de sesión y proveedor de membresía personalizada
- 2. Proveedor de membresía ASP.NET - Inicio de sesión único
- 3. Composite C1 - Proveedor de membresía - Registro simple e inicio de sesión
- 4. Proveedor de membresía de ASP.NET con EF
- 5. Spring Security - Inicio de sesión programático sin contraseña
- 6. Problema de inicio de sesión de membresía de ASP.Net
- 7. Inyección de dependencia con un proveedor de membresía personalizado
- 8. oAuth Proveedor de membresía de ASP.NET
- 9. Agregar membresía grupal al proveedor de Membresía/Roles personalizado
- 10. Membresía, Membresía Proveedor y Membresía ¿Relaciones con el usuario en ASP.NET?
- 11. ¿Cómo desactivo una cuenta con el proveedor de membresía ASP.NET?
- 12. Migrar lejos de un proveedor de inicio de sesión social
- 13. .NET Membresía personalizada vs. Inicio de sesión/registro personalizado: Autenticación/Autorización
- 14. Proveedor de membresía de asp.net personalizado
- 15. Proveedor de membresía ASP.NET con correo electrónico de confirmación
- 16. Bloqueo de un usuario en un proveedor de membresía ASP .Net personalizado
- 17. Extendiendo un proveedor de membresía personalizado
- 18. Obtenga un proveedor de membresía específico
- 19. Autenticación API web ASP.NET MVC 4 con proveedor de membresía
- 20. Inyectar en un proveedor de membresía personalizado con StructureMap
- 21. ¿Qué proveedor de membresía implementa usuarios almacenados en web.config?
- 22. autenticación de ASP.NET inicio de sesión y cierre de sesión con el botón Atrás del navegador
- 23. ¿Debo usar el proveedor de membresía incorporado para una aplicación ASP .NET MVC?
- 24. protección de páginas no .aspx con el proveedor de membresía Asp.net
- 25. ASP.NET MVC Proveedor de membresía personalizado Error Web.config
- 26. Membresía .NET en la aplicación nTier
- 27. Elimina la membresía asp.net y el proveedor de roles
- 28. Usando el proveedor de membresía de ASP.NET con una base de datos de usuario existente
- 29. Algoritmo hash diferente para el proveedor de membresía ASP.NET?
- 30. ASP.NET Proveedor de membresía personalizado para aplicaciones muy grandes
necesito la llamada a Membership.GetUser() para devolver el usuario actualmente conectado. – ddc0660
No llame a Membership.GetUser() directamente en la clase bajo prueba. Proporcione a la clase un IGetUser en la creación, utilícelo en lugar de Membership.GetUser(), luego realice una implementación simulada de IGetUser para realizar pruebas. –