0
我成功安装了另一个论坛(yaf)代码,并成功将其与博客引擎2.0集成。现在我想拥有博客引擎2.0和yaf的通用登录名,即当我登录blogengine2 .0自动yaf必须登录。任何人都可以向我推荐解决方案?yaf与博客引擎2.0集成
我成功安装了另一个论坛(yaf)代码,并成功将其与博客引擎2.0集成。现在我想拥有博客引擎2.0和yaf的通用登录名,即当我登录blogengine2 .0自动yaf必须登录。任何人都可以向我推荐解决方案?yaf与博客引擎2.0集成
更改MembershipPorivder在webconfig以下:
//I have changaned the following to be able to genrate a password myself and to be able to retrive it when i want to login the use, you can change this if you want or just leave it as it is.
<membership defaultProvider="YafMembershipProvider" hashAlgorithmType="NONE" >
<providers>
<clear/>
<add connectionStringName="yafnet" applicationName="YetAnotherForum" name="YafMembershipProvider" passwordFormat="Clear" requiresUniqueEmail="true" useSalt="false" enablePasswordRetrieval="true" type="YAF.Providers.Membership.YafMembershipProvider"/>
</providers>
</membership>
这里这个方法将创建一个YAFUser,所有这些方法都是从代码中提取的YAF库,我只是做了很多对他们提取一切我想:
/// <summary>
/// Register YAF User
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <param name="email"></param>
/// <param name="displayName"></param>
public static MembershipUser RegisterYAF_User(string userName, string password, string email, string displayName)
{
//Intilize YAFMembershipProvider
MembershipCreateStatus status;
YafMembershipProvider provider = new YafMembershipProvider();
NameValueCollection valueCollection = new NameValueCollection();
valueCollection.Add("connectionStringName", "yafnet");
valueCollection.Add("applicationName", "YetAnotherForum");
valueCollection.Add("passwordFormat", "Clear");
provider.Initialize("YafMembershipProvider", valueCollection);
//Register YAFMembershipUser
MembershipUser user = provider.CreateUser(userName, password, email, "What is your favorite football team ?", "None", true, new YAF.Providers.Profile.DB().GetProviderUserKey("YetAnotherForum", userName), out status);
//Register YAFUser
if (user != null)
{
//Add user to role
RoleMembershipHelper.AddUserToRole(user.UserName, "Registered");
// setup inital roles (if any) for this user
RoleMembershipHelper.SetupUserRoles(YafContext.Current.PageBoardID, userName);
// create the user in the YAF DB as well as sync roles...
int? userID = RoleMembershipHelper.CreateForumUser(user, user.UserName, YafContext.Current.PageBoardID);
// create empty profile just so they have one
YafUserProfile userProfile = YafUserProfile.GetProfile(user.UserName);
// setup their inital profile information
userProfile.Location = "USA";
userProfile.Homepage = string.Empty;
userProfile.Save();
LegacyDb.user_save(
UserMembershipHelper.GetUserIDFromProviderUserKey(user.ProviderUserKey),
YafContext.Current.PageBoardID,
null,
null,
null,
YafContext.Current.TimeZoneUser.ToType<int>(),
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null);
}
return user;
}
此功能是用来登录的YAFUser:
//Login yaf user
/// <summary>
/// Login
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
public static void LoginYAF_User(string userName, string password)
{
MembershipCreateStatus status;
YafMembershipProvider provider = new YafMembershipProvider();
NameValueCollection valueCollection = new NameValueCollection();
valueCollection.Add("connectionStringName", "yafnet");
valueCollection.Add("applicationName", "YetAnotherForum");
valueCollection.Add("passwordFormat", "Clear");
provider.Initialize("YafMembershipProvider", valueCollection);
bool Authenticated = false;
if (provider.ValidateUser(userName, password))
{
Authenticated = true;
FormsAuthentication.SetAuthCookie(userName, true);
}
else if (new YafBoardSettings().EnableDisplayName)
{
var id = new DefaultUserDisplayName(YafContext.Current.ServiceLocator).GetId(userName);
if (id.HasValue)
{
// get the username associated with this id...
userName = UserMembershipHelper.GetUserNameFromID(id.Value);
// validate again...
if (provider.ValidateUser(userName, password))
{
Authenticated = true;
}
}
}
//These 2 lines of code is to redirect to the fourm main page
//YafContext.Current.Get<IRaiseEvent>().Raise(new SuccessfulUserLoginEvent(YafContext.Current.CurrentUserData.UserID));
//YafBuildLink.Redirect(ForumPages.forum);
}
之后去YAFMembershipProvider.cs,并添加一个重载方法如下所示:
public string GetPassword(string username)
{
// Check for null arguments
if ((username == null))
{
ExceptionReporter.ThrowArgument("MEMBERSHIP", "USERNAMEPASSWORDNULL");
}
UserPasswordInfo currentPasswordInfo = UserPasswordInfo.CreateInstanceFromDB(
"YetAnotherForum",
username,
false,
this.UseSalt,
this.HashHex,
this.HashCase,
"",
this.MSCompliant);
return currentPasswordInfo.Password;
}
在这方面,我都给予了99%个百分点,剩下的只是普通的简单的编码,作为博客,你应该使用相同的概念。通过DataLayer搜索并获取所需的所有方法,以便在任意数量的应用程序之间进行同步。
您需要创建一个类来检查两个系统,如果来自BLOG的用户进入YAF或反之亦然。在这个类中将会有每个系统的注册方法和登录方法。如果你需要帮助代码告诉我,我可以帮助你,因为我自己做了这件事。 –
雅我需要it.Can你给代码的帮助 – Sharathsshetty