【问题标题】:yaf integration with blog engine2.0yaf与博客引擎2.0集成
【发布时间】:2012-05-09 09:35:47
【问题描述】:

我成功安装了另一个论坛(yaf)代码并将其与博客引擎 2.0 成功集成。现在我想为博客引擎 2.0 和 yaf 提供通用登录,即当我自动登录 blogengine2.0 时,yaf 必须是已登录。任何人都可以建议我解决方案吗?

【问题讨论】:

  • 您需要创建一个类来检查两个系统,如果来自 BLOG 的用户转到 YAF,反之亦然。在这个类中,每个系统都会有注册方法和登录方法。如果您需要代码方面的帮助,请告诉我,我可以帮助您,因为我自己已经完成了。
  • 你我需要它。你能在代码中提供帮助

标签: integration blogengine.net yaf


【解决方案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 并获取您需要在任意数量的应用程序之间同步的所有方法。

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2011-06-26
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多