Quel est le meilleur moyen de faire en sorte que certaines pages sur asp.net nécessitent un identifiant?

StackOverflow https://stackoverflow.com/questions/477607

Question

Je travaille avec le projet de site Web asp.net sur le fait que certaines pages nécessitent une authentification. J'utilise un abonnement asp.net.

J'ai lu des réponses. par exemple. créer toutes ces pages dans un dossier et créer inner web.config qui décrit le privilège. C’est un moyen de résoudre le problème, mais j’ai besoin d’un moyen qui soit plus réparable et efficace.

Était-ce utile?

La solution

Si vous ne souhaitez pas coder cela dans Web.config, vous devez implémenter une "page de base". contrôle de type.

Votre classe de page de base doit hériter de System.Web.UI.Page et doit disposer d'une méthode que vous pouvez appeler pour indiquer que "l'utilisateur doit être connecté". ou "L'utilisateur doit être dans le rôle x", et s'il ne l'occupe pas, redirigez-le vers la page de connexion (vous pouvez l'obtenir en appelant FormsAuthentication.LoginUrl ).

Vos pages réelles doivent hériter de cette classe plutôt que de System.Web.UI.Page directement. Ensuite, dans quelque chose comme Init ou au sommet de Page_Load, appelez

base.UserMustBeLoggedIn();

ou

// Replace "AccessRole" with the name of your role
base.UserMustBeInRole("AccessRole");

Et laissez la page de base gérer cela.

Si vous préférez que les droits d'accès soient stockés dans une base de données, vous pouvez déplacer l'ensemble du traitement vers la page de base et, à un emplacement approprié du cycle de vie de la page, vérifiez l'URL actuelle par rapport à la table de votre base de données, puis vérifiez les utilisateurs. rôle / authentification par rapport aux exigences et redirigez-le si nécessaire.

Notez que vous pouvez créer une sécurité au niveau de la page dans la configuration Web comme suit:

<configuration>
  <location path="LockedPage.aspx">
    <system.web>
      <authorization>
        <!-- Deny access to anonymous users -->
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

Plus d'informations sont disponibles sur MSDN: L'élément Location et < a href = "http://msdn.microsoft.com/en-us/library/532aee0e.aspx" rel = "noreferrer"> L'élément d'autorisation .

Autres conseils

Vous pouvez essayer ce code, Dans l'événement de chargement de la page maître, écrivez ce code, ajouter une propriété

public bool m_bLoginRequired = true;

public bool IsLoginRequired
{
    get { return m_bLoginRequired; }
    set { m_bLoginRequired = value; }
}



try
        {
            // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
            Response.Cache.SetNoStore();
            if (IsLoginRequired==true)
            {
                    if ( Session.IsNewSession  || HttpContext.Current.Session["Username"] == null)
                    {
                        FormsAuthentication.SignOut();
                        FormsAuthentication.RedirectToLoginPage("Session Expired");
                        Response.End();
                    }
                }
            }
        catch (Exception ex)
        {
            throw (ex);
        }

maintenant dans la page de connexion, vous devez écrire ce code

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false);  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR");
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,  FormsAuthentication.Encrypt(ticket));
            cookie.Name = "jay";
            Session["UserName"] = txt_UserName.Text.Trim();
            Response.Cookies.Add(cookie);
            txt_UserName.Text = "";
            txt_Password.Text = "";
            Response.Redirect("HomePage2.aspx");

maintenant vous devez ajouter un événement pageinit dans la page de connexion

protected void Page_PreInit(object sender, EventArgs e)
    {
        Master.IsLoginRequired = false; 
    }

si vous voulez que l'utilisateur puisse accéder à une page non autorisée, alors dans l'événement pageinit de cette page

définir le Master.IsLoginRequired = false;

spécifiez également le loginurl dans le fichier web.config .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top