Formulaire d'authentification avec redirection
Objectifs:
- Gérer l'état d'une application ASP.net
- Utiliser les variables d'état côté client
- Manipuler la requête et la réponse avec les objets Request et Response
- Récupérer les données envoyées par les méthodes GET et POST
Énoncé:
L’objectif de cet exercice est de protéger une page (qui contient des informations confidentielles) par un mot de passe.
a- Créer un formulaire (login.aspx) qui demande à l’utilisateur la saisie de son pseudo et son mot de passe et qui appelle la page protégée (secret.aspx).
L'accès au contenu de la page (secret.aspx) ne sera autorisé que si le pseudo et le mot de passe sont corrects.
Si l’utilisateur demande la page secret.aspx directement, il devra être redirigé vers la page d’authentification en lui affichant un message d’erreur.
Utilisez les méthodes response.redirect(url_page) et server.transfer(url_page) qui permettent de rediriger l’utilisateur vers la page spécifiée en paramètre.
Vous devez donc créer 2 pages web :
- login.aspx : contient un simple formulaire d’authentification.
- secret.aspx: contient les informations confidentielles mais ne les affiche que si on lui donne le mot de passe.
Page login.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="tp3_exelib.Exercices.login" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <h3>Authentification</h3> <div> <asp:Label ID="lblErreur" runat="server" style="color: #FF0000; font-weight: 700;"></asp:Label> <br /> <br /> </div> <div> <asp:Label ID="Label1" runat="server" Text="Pseudo:"></asp:Label> <asp:TextBox ID="txtPseudo" runat="server"></asp:TextBox> <br /> <br /> <asp:Label ID="Label2" runat="server" Text="Mot de passe: "></asp:Label> <asp:TextBox ID="txtPass" runat="server" TextMode="Password"></asp:TextBox> <br /> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Se Connecter" /> </div> </form> </body> </html>
public partial class login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.QueryString["erreur"] != null) { lblErreur.Text = "Vous devez vous connecter pour voir la page secrète!"; } } } protected void Button1_Click(object sender, EventArgs e) { if(txtPseudo.Text == "exelib.net" && txtPass.Text == "123456") { Server.Transfer("secret.aspx"); } else { lblErreur.Text = "Pseudo ou Mot de passe incorrect!"; } } }
Page secret.aspx
<form id="form1" runat="server"> <h3>Page secrète</h3> <div> <asp:Label ID="lblSecret" runat="server" style="font-weight: 700"></asp:Label> </div> </form>
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.Form["txtPseudo"] == null) { Response.Redirect("login.aspx?erreur=1"); } lblSecret.Text = "Bienvenue " + Request.Form["txtPseudo"]; lblSecret.Text += "<br>Vos informations confidentielles"; } }
Pour rediriger l'utilisateur à la page secrète, il faut utiliser la fonction Server.Transfer afin de passer les données du formulaire avec la requête sinon avec la fonction Response.Redirect on ne peut pas récupérer les données envoyées par la méthode POST