0

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

4

1 に答える 1

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>

ここでのこのメソッドは 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 を検索して、必要な数のアプリケーション間で同期するために必要なすべてのメソッドを取得します。

于 2012-05-22T08:43:23.920 に答える