2012-05-09 86 views
0

我成功安装了另一个论坛(yaf)代码,并成功将其与博客引擎2.0集成。现在我想拥有博客引擎2.0和yaf的通用登录名,即当我登录blogengine2 .0自动yaf必须登录。任何人都可以向我推荐解决方案?yaf与博客引擎2.0集成

+0

您需要创建一个类来检查两个系统,如果来自BLOG的用户进入YAF或反之亦然。在这个类中将会有每个系统的注册方法和登录方法。如果你需要帮助代码告诉我,我可以帮助你,因为我自己做了这件事。 –

+0

雅我需要it.Can你给代码的帮助 – Sharathsshetty

回答

1

更改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搜索并获取所需的所有方法,以便在任意数量的应用程序之间进行同步。