by aboo bolaky
29. July 2009 06:19
Let's not re-invent the wheel and make use of the ASP.NET 2.0 LoginView control to generate Login/Logout actions for the Sitecore extranet domain.
We have our LoginView control (very simplistic example given here) in a sublayout.
<asp:LoginView ID="loginView" runat="server">
<AnonymousTemplate>
Welcome Guest <asp:LoginStatus runat="server" LoginText="Login" />
</AnonymousTemplate>
<LoggedInTemplate>
Welcome <%= Sitecore.Context.User.Name %>.
<asp:LoginStatus runat="server" LogoutText="Logout"
LogoutPageUrl="/" LoginText="Login" LogoutAction="Redirect" />
</LoggedInTemplate>
</asp:LoginView>
LoginView Control Caveat
The LoginView control "magically" knows the login page url. This is specified by the LoginUrl attribute in the FormsAuthentication section of the web.config. This is not to be confused the LoginPage attribute (from the sites section). I had to modify my web.config to
<authentication mode="Forms">
<forms name=".ASPXAUTH" cookieless="UseCookies"
loginUrl="~/General/Login.aspx" />
</authentication>
Erractic Behaviour when logging out
I did not experience any problems when logging in .i.e. the control did what is was supposed to do (display sitecore username and Logout Link). HOWEVER, when I pressed the Logout link, I always got redirected the Sitecore Layout page instead. I did spot similar behaviour with ListViews in Sitecore (also documented by Paul George and Mark Cassidy, where its events were not being fired at all. I've made the following change to my web.config and that solved the problem :)
<typesThatShouldNotBeExpanded>
<type>System.Web.UI.WebControls.Repeater>/type>
<type>System.Web.UI.WebControls.DataList>/type>
<type>System.Web.UI.WebControls.LoginView>/type>
</typesThatShouldNotBeExpanded>
A similar problem that relates to the typesThatShouldNotBeExpanded tag has also been documented on SDN