28 votes

Événement AuthenticateRequest


Q 1. Ma compréhension FormsAuthenticationModule souscrit AuthenticateRequest événement, et donc seulement après cet événement est déclenché, est - FormsAuthenticationModule appelé. Mais les citations ci-dessous m'a un peu confuse:

  1. L' AuthenticateRequest événement signale que la configuration du mécanisme d'authentification a authentifié la demande actuelle.

    • N'est pas la citation ci-dessus indiquent que, lorsque l' AuthenticateRequest événement est déclenché, demande (aka l'utilisateur est déjà authentifié?
  2. En souscrivant à l' AuthenticateRequest événement s'assure que la demande sera authentifié avant le traitement de l'attaché de module ou de gestionnaire d'événements.

    • Autant je comprends cette citation, si nous souscrivons à l' AuthenticatedRequest, alors notre gestionnaire d'événements va être appelée avant FormsAuthenticationModule? Ainsi, Application_AuthenticateRequest() sera appelée avant d' FormsAuthenticationModule est appelé?


Q 2. Livre je suis d'accord pour penser que sur Application_AuthenticateRequest() nous sommes en mesure de vérifier si l'utilisateur est un membre du rôle spécifique, et si non, nous pouvons ajouter automatiquement l'utilisateur:

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
            if (User.Identity.IsAuthenticated && Roles.Enabled)
            {

                //here we can subscribe user to a role via Roles.AddUserToRole()
            }       
    }

À en juger par le code ci-dessus, Application_AuthenticateRequest() est appelée après l' FormsAuthenticationModule a été invoquée, mais quelque part d'autre d'un même livre implique qu' Application_AuthenticateRequest() est appelé avant l' FormsAuthenticationModule:

Application_AuthenticateRequest est appelée juste avant l'authentification est effectuée. C'est un point de départ pour la création de votre propre logique d'authentification.


Ce qui me manque?


Merci

40voto

bbmud Points 2015

Il semble que le FormsAuthenticationModule est prise en charge en premier. Ce module est normalement plus tôt que de coutume dans le module ASP.NET pipeline, de sorte que lorsque AuthenticateRequest est tiré, FormsAuthenticationModule seront appelés tout d'abord, faire son travail et puis de votre module gestionnaire d'événements va être appelé.

Si vous voulez vraiment creuser profondément dans la présente, je vous propose d'essayer de déboguer l'ASP.NET le code vous-même. Voici un post comment configurer votre VS:

http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

EDIT: j'ai été en mesure de confirmer ce comportement par la mise en place d'un projet web avec module personnalisé et les gestionnaires d'événements Mondiaux.asax. Regardez le code source de HttpApplication.InitInternal, l'ordre de l'initialisation est comme suit:

  • l'initialisation des modules intégrés: FormsAuthenticationModule crochets jusqu'à HttpApplication.AuthenticateRequest événement
  • l'initialisation des modules personnalisés: module personnalisé crochets jusqu'à HttpApplication.AuthenticateRequest événement
  • l'initialisation de la classe Globale (à l'échelle mondiale.asax): ici nous accrocher jusqu'à la AuthenticateRequest événement
  • HttpApplication.InitInternal recherches pour des méthodes de classe Global suivant les modèle de nom (par exemple, Application_AuthenticateRequest), correspond à l'événement et crochets

Après l'initialisation, lorsque le AuthenticateRequest les incendies, les gestionnaires d'événements sont appelés dans l'ordre où ils initialisé, donc:

  • FormsAuthenticationModule.AuthenticateRequest gestionnaire d'événements
  • Modulepersonnalisé.AuthenticateRequest gestionnaire d'événements
  • Mondiale.AuthenticateRequest gestionnaire d'événements
  • Mondiale.Méthode Application_AuthenticateRequest

À moins que j'ai raté quelque chose, il n'y a pas de mécanisme pour arrêter les gestionnaires d'événements à feu, de sorte que quel que soit le résultat de FormsAuthenticationModule.AuthenticateRequest, la prochaine gestionnaires sera toujours appelé. J'espère que ça aide.

3voto

Shelakel Points 688

Si vous voulez accéder à l'objet Utilisateur, je vous suggère d'utiliser

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X