BigBastis Blog

Ausgeben einer Meldung nach dem Anmelden des Benutzers an einer ASP.NET Webseite

Introduction

user

Michael Bernhard


LATEST POSTS

Entstehung einer ASP.NET Webanwendung anhand eines Beispiels 08th June, 2011

.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 Sub

Diese 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 Sub

Eine 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 Sub

Einen 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.

profile

Michael Bernhard

Comments

Kommentar verfassen

View Comments (1) ...
Navigation