2010-11-30 29 views
3

J'ai de qui perdent leurs données utilisateur parce qu'ils sont assis sur une page trop long, puis sont invités à se reconnecter Je veux faire ce qui suit:.Comment intercepter une demande d'authentification dans ASP.net formulaire en ligne

1) Au lieu de les rediriger vers une page de connexion, je souhaite annuler la demande en cours et donner à l'utilisateur une boîte de dialogue avec laquelle se connecter.

2) Lorsque la connexion est réussie, je veux que l'utilisateur soit renvoyé à son formulaire, avec toutes les données intactes. (Encore mieux si la demande pouvait passer sans les renvoyer à ce formulaire, mais ceci est facultatif).

Comment puis-je intercepter ces demandes d'authentification et présenter à l'utilisateur un identifiant de connexion? J'utilise l'authentification par formulaires ASP.net.

+0

Que voulez-vous dire par 1) par "annuler la demande"? Une fois que la requête est côté serveur, vous ne pouvez pas vraiment l'annuler. –

+0

Votre droite, annuler n'est pas le bon mot. Je ne veux simplement pas que les données de formulaire soient vidées. – MAW74656

Répondre

2

Vous pouvez intercepter cet événement sur Application_AuthenticateRequest dans Global.asax

Mais, il faut être plus précis, utilisez-vous le formulaire ASP.NET d'authentification?

Ajouté:

Essayez et me répondre

Dans Global.asax

void Application_AuthenticateRequest(object sender, EventArgs e) 
{ 

    if (HttpContext.Current.User == null) 
    { 
     FormsAuthenticationTicket ticket = new 
         FormsAuthenticationTicket(1, "Anonymous", DateTime.Now, DateTime.Now.AddMinutes(30), false, "Anonymous"); 

     string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

     HttpCookie cookie = 
      new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 

     Response.Cookies.Add(cookie); 

     FormsIdentity id = new FormsIdentity(ticket); 

     System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, ticket.UserData.Split(new char[] { '|' })); 

     Context.User = principal; 
    } 

} 

Dans un formulaire web

string cookieName = FormsAuthentication.FormsCookieName; 

    HttpCookie authCookie = Context.Request.Cookies[cookieName]; 

    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

    if (authTicket.UserData == "Anonymous") 
    { 

     //Throw the login popup 

    } 
    else 
    { 

     //Some Code 

    } 
+0

Oui, je le suis. Désolé, j'ai ajouté ça. Pouvez-vous nous expliquer comment intercepter cet événement? J'ai une gestion des exceptions non gérée dans global.asax, donc je l'ai utilisé un peu, mais pas cet événement. – MAW74656

+0

Je suppose que vous avez quelque chose comme ça, dans votre web.config: , non? –

+0

J'ai une section d'authentification, mais son vide avec les valeurs par défaut. – MAW74656

0

Utilisez-vous une page maître? Vous pouvez rediriger vers là lorsque la connexion est requise, et non une page de connexion distincte. Dans le code de connexion de la page maître, vous avez ensuite décidé de rediriger vers une page de connexion autonome appropriée ou de rendre visible une div de connexion sous la forme d'une fenêtre contextuelle.

+0

J'utilise 2 niveaux de pages maîtres imbriquées, mais cela ne concerne pas les données qui se trouvaient dans le formulaire Web avant la demande d'authentification (qui est la partie importante). Une div pop-up pourrait fonctionner pour la connexion en partie, cependant. – MAW74656

+0

Pouvez-vous élaborer sur la création d'un popup de connexion? – MAW74656