YetAnotherForum (or YAF for short) is an open source discussion forum written in C# and .NET. Sitecore and YAF cannot run in the same IIS application (they can, if you change the YAF source code, which I will show in a later post), but with a little piece of open source code you are able to use the Sitecore users in YAF.
The open source code is available at:
http://trac.sitecore.net/YAFSingleSignon
The idea is to have Sitecore and YAF running in the same second-level domains: For example let your Sitecore website run at www.mysite.com and YAF in forum.mysite.com.
When users log into the Sitecore extranet, the user information is stored in a cookie which is then digested by YAF.
First you will need to download the code from http://trac.sitecore.net/YAFSingleSignon and build it yourself.
Copy the YAFLogin.dll to your Sitecore /bin/ folder. Then copy the YAFLogin.dll and SitecoreLogin.dll to the YAF /bin/ folder. Also copy the /sitecorelogin/default.aspx page to YAF.
In order to save the extranet credentials, you must apply the following 2 lines of code to your Sitecore extranet login dialog:
// Create a SitecoreUser by logging into the Sitecore extranet
// and retrieve the user information
SitecoreUser user = SitecoreUser.Login(eUserName.Text, ePassword.Text, chkRememberMe.Checked);
// Store the SitecoreUser as a cookie. This cookie can be retrieved by YAF.
user.Store();
That’s it. The user information is persisted in a cookie which can be digested by YAF, as cookies can be shared across second-level domains. There are 2 methods of digesting the Sitecore extranet user. The first method is to call the /sitecorelogin/default.aspx page which will create the user in YAF (if not already existing) do a login a redirect to the default YAF page. The second method is to extend the default.aspx page of YAF with the following code:
protected void Page_Load(object sender, EventArgs e)
{
try
{
// Restore the sitecore user from the persistant storage (the cookie)
YAF.Sitecore.PersistenceManager manager = new YAF.Sitecore.PersistenceManager();
YAF.Sitecore.SitecoreUser user = manager.Restore();
if (user != null)
{
// Instantiate the login manager and log the Sitecore user into YAF
YAF.Sitecore.LoginManager loginManager = new YAF.Sitecore.LoginManager();
loginManager.Login(user);
// The SitecoreUser is now logged in, and the cookie can be removed
manager.Delete();
// Load same page to let YAF read the session
Response.Redirect(Request.RawUrl,false);
}
}
catch (Exception ex)
{
Response.Write("Failed to login Sitecore Extranet user: " + ex.Message);
}
}
This code does the same as the /sitecorelogin/default.aspx but will be executed by every page in YAF you call.
You can read more about the source code at http://trac.sitecore.net/YAFSingleSignon/browser/Trunk/Sitecore.YAF.docx