.NET
Ausgeben einer Meldung nach dem Anmelden des Benutzers an einer ASP.NET Webseite
Posted on .Neulich habe ich auf einer meiner Seiten neben dem normalen Zugang für Benutzer auch einen Gastzugang eingerichtet.
Meldet sich jemand als Gast an meinem System an, stehen im alle Seiten des Adminbereiches zur Ansicht zur Verfügung, ein Speichern der Änderungen wird jedoch nicht erlaubt.
Um den Gastnutzer meiner Seite auf diese Einschränkungen und andere Besonderheiten hinzuweisen – wollte ich eine Meldung ausgeben – sobald der Gast sich beim System angemeldet hat.
Ich verwende zur Anmeldung der Benutzer die vom Visual Studio 2010 automatisch generierte Seite LogIn.aspx.
Im Folgenden möchte ich zeigen wie man diese automatisch generierte Seite abändern muss um oben beschriebenes umzusetzen zu können.
Die Meldung möchte ich als ModalPopup ausgeben. Hierfür erweiterte ich die LogIn.aspx um den Code für das ModalPopup
... <div style="display:none;"> <asp:Button ID="ButtonGastLogIn" runat="server" /> </div> <asp:ToolkitScriptManager ID="ToolkitScriptManagerGastLogIn" runat="server"/> <asp:ModalPopupExtender ID="ModalPopupExtenderGastLogInt" runat="server" TargetControlID="ButtonGastLogIn" PopupControlID="PopupGastLogIn" cancelControlID="ButtonClose" backgroundcssclass="ModalPopupBG"> </asp:ModalPopupExtender> <div id="PopupGastLogIn" runat="server"> ... <asp:imageButton ID="ImageButtonOK" runat="server" ImageUrl="~/image.png" /> </div>Zu beachten ist hier, dass der Button zum Anzeigen des Popup nicht sichtbar ausgeführt wird.
Immerhin soll das Popup, abhängig davon ob sich ein normaler Benutzer oder ein Gast anmeldet, angezeigt werden oder eben nicht.Die Codebehind-Datei wird wie folgt erweitert.
Protected Sub LoginUser_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles LoginUser.Authenticate If ClassLogIn.CheckUser(Me.LoginUser.UserName, Me.LoginUser.Password) String.Empty Then 'Anmeldung ok FormsAuthentication.RedirectFromLoginPage(Me.LoginUser.UserName, True) Else 'Anmeldung fehlgeschagen e.Authenticated = False End If End SubDiese Sub wird mit dem Drücken des Anmelden Buttons ausgeführt.
ClassLogIn.CheckUser ist eine von mir geschriebene Funktion die die Benutzereingaben prüft.
Sie werden vermutlich eine ähnliche Vorgehensweise gewählt haben, entscheidend für die Authentifizierung des Benutzers ist FormsAuthentication.RedirectFromLoginPage(…).
Dadurch wird der Benutzer angemeldet (authentication) und an die Ursprungsseite weitergeleitet.Dieses Vorgehen wollen wir, für alle normalen Benutzer unseres Systems, weiterhin nutzen.
Es gilt nun zwischen „normalen Nutzern“ und „Gästen“ zu unterscheiden.
Da FormsAuthentication.RedirectFromLoginPage(..) den Response an die Ursprungsseite weiterleitet eignet sich dieses Vorgehen, zum Anmelden, für das Anzeigen eines ModalPopup nicht.FormsAuthentication.SetAuthCookie(..) erfüllt unsere Bedürfnisse nach einer Authentifizierung ohne Weiterleitung perfekt. Zu beachten ist hier aber das die Authentifizierung erst vollständig ausgeführt wurde wenn ein Response stattgefunden hat.
Wir teilen die notwendigen Schritte also in zwei Teile auf.
Im ersten Schritt ändern wir unsere Sub von oben ein wenig ab.Protected Sub LoginUser_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles LoginUser.Authenticate If ClassLogIn.CheckUser(Me.LoginUser.UserName, Me.LoginUser.Password) String.Empty Then 'Anmeldung ok If ClassLogIn.IsGast(Me.LoginUser.UserName) = True Then FormsAuthentication.SetAuthCookie(Me.LoginUser.UserName, True) Me.ModalPopupExtenderGastLogInt.Show() Else FormsAuthentication.RedirectFromLoginPage(Me.LoginUser.UserName, True) End If Else 'Anmeldung fehlgeschagen e.Authenticated = False End If End SubEine weitere Funktion prüft ob sich ein Gast oder ein normaler User am System anmelden will.
Handelt es sich um einen Gast, führen wir den ersten Teil der Authentifizierung aus und zeigen das ModalPopup an.Wird das ModalPopup geschlossen leiten wir den Response an eine andere Seite unseres Systems weiter.
Damit wird der Anmeldevorgang abgeschlossen.Protected Sub ImageButtonOK_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles ImageButtonOK.Click Server.Transfer("~/Default.aspx") End SubEinen Nachteil hat das Ganze, ein Gast wird – im Gegensatz zu einem normalen Benutzer – immer auf eine bestimmte Seite (hier Default.aspx) weitergeleitet.
Über den Autor
Michael Bernhard
Hobby-Programmierer von VB.NET, C# und ASP.NET Anwendungen. Hauptberuflich als Inbetriebnehmer bei der Böwe Systec GmbH beschäftigt. Vorzeigbare Projekte – TimeZone Notifier und TSV Neusäß Junioren.