2011-08-20 52 views
11

Estoy usando un control createuserwizard. En el evento CreatedUser coloqué este código para agregar al usuario a un rol.¿Qué significa FormsAuthentication.SetAuthCookie do

protected void RegisterUser_CreatedUser(object sender, EventArgs e) 
    { 
     FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */); 


     if (!Roles.IsUserInRole("Test")) 
     { 
      var User= Membership.GetUser(); 
      Roles.AddUserToRole(User.UserName, "Test"); 
     } 

     string continueUrl = RegisterUser.ContinueDestinationPageUrl; 

     if (String.IsNullOrEmpty(continueUrl)) 
     { 
      continueUrl = "~/"; 
     } 
     Response.Redirect(continueUrl); 
    } 

También me gustaría saber qué FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */); medios y para qué se usa y por qué Membership.GetUser() es nulo.

+0

Creo que el proveedor de membresía predeterminado no comprueba la cookie cada vez que verifica el usuario conectado, sino que la verifica durante la etapa anterior de procesamiento de solicitud. null para la misma solicitud que 'SetAuthCookie', pero la siguiente solicitud lo verá el usuario. Creo que esto es retrasado y estoy buscando una manera simple de evitarlo ... – bambams

Respuesta

12

¿Tiene LoginCreatedUser="false" o DisableCreatedUser="true" en su CreateUserWizard?

Los evitará que el usuario se registre en forma inmediata, y causar Membership.GetUser() para volver nula, debido a que el usuario no está conectado en ese momento.

Si desea que el usuario puede registrar en forma inmediata, ni establecer o ambos LoginCreatedUser="true" y DisableCreatedUser="false" en su CreateUserWizard. Eso debería hacer funcionar tu código actual.

FormsAuthentication.SetAuthCookie() establece una cookie del navegador para iniciar la sesión del usuario. Es lo que mantiene al usuario conectado cada vez que se publica una página en el servidor. createPersistentCookie crea una cookie persistente que no caduca cuando el navegador está cerrado, por lo que el usuario puede volver al sitio y iniciar sesión automáticamente. Debe basarse en si el usuario marcó la casilla "Recordarme" en su formulario de inicio de sesión. No está disponible en el formulario CreateUserWizard de forma predeterminada, pero puede agregar una casilla de verificación en su plantilla, si lo desea.

Si no desea que el usuario inicie sesión automáticamente, elimine la línea FormsAuthentication.SetAuthCookie() de su código y establezca las propiedades CreateUserWizard de forma adecuada. Si desea aprobar a los usuarios antes de que puedan iniciar sesión, configure DisableCreatedUser="true". Esto evitará que inicien sesión hasta que configure el usuario IsApproved=true desde el módulo .Net Users en el Administrador de IIS, o que tenga una página web personalizada para aprobar a los usuarios.

fijas que se pueden establecer añadir el usuario a la función apropiada cuando se crea el usuario sin necesidad de registrarlos en:

if (!Roles.IsUserInRole(RegisterUser.UserName, "Test")) 
{ 
    Roles.AddUserToRole(RegisterUser.UserName, "Test"); 
} 
1

Después de crear el usuario, que desea que se registren en forma inmediata, ¿correcto? Si ese es el caso, suelta la cookie de autenticación que usa asp.net para determinar si el usuario está autenticado (diferente de lo autorizado). El "falso" significa que no es persistente (equivalente a la opción "¿Recordarme?" En el formulario de inicio de sesión.

En cuanto a por qué su usuario es NULO, le sugiero ubicar un punto de interrupción justo antes de esa llamada de GetUser y consultar su usuario de la tienda de datos para ver si está realmente allí.

+0

Hola Juan, ¿puedes ayudar con http: //stackoverflow.com/questions/16302505/asp-net-authentication –

+0

Veo que era contestada. Lo siento, no he estado revisando mis mensajes últimamente :-) –

Cuestiones relacionadas