2012-05-09 9 views
0

もう1つのフォーラム(yaf)コードが正常にインストールされ、ブログエンジン2.0と統合されました。今、blogengine2とyafの共通ログインが必要です。 .0自動的にyafがログインしている必要があります。だれでも私に解決策を提案できますか?yafとブログengine2.0の統合

+0

BLOGのユーザーがYAFに行った場合、またはその逆の場合は、両方のシステムをチェックするクラスを作成する必要があります。このクラスには、各システムの登録メソッドとログインメソッドがあります。あなたがコードで助けが必要なら私に教えてください、私はあなたが私がこれを自分でやった原因を助けることができます。 –

+0

ya私はそれを必要としています。 – Sharathsshetty

答えて

1

変更し、次へのWebConfigでMembershipPorivder:

//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> 
YAFライブラリは、私はちょうどすべてを抽出するために、彼らに多くのことを働いたYAFUserを作成します。ここでは、この方法で、すべてのこれらのメソッドは、コードから抽出され

I欲しい:

/// <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に移動し、次のようにオーバーロードメソッドを追加します。ブログのためにあなたが使用する必要があるとして、私は99%のパーセントを与えている。この中

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; 
} 

、残りは、単なるシンプルな符号化です同じ考え方。 DataLayerを検索し、必要な数のアプリケーション間で同期する必要があるすべてのメソッドを取得します。