首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >yaf与博客引擎2.0的集成

yaf与博客引擎2.0的集成
EN

Stack Overflow用户
提问于 2012-05-09 17:35:48
回答 1查看 530关注 0票数 0

我成功地安装了另一个论坛( yaf )代码,并将其与博客引擎2.0 successfully.Now集成,我想要有博客引擎2.0和yaf的通用登录,即当我自动登录博客引擎2.0时,yaf必须登录.Can,有人能给我建议解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-22 16:43:24

将the配置中的MembershipPorivder更改为以下内容:

代码语言:javascript
复制
//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库上花了很多功夫来提取我想要的一切:

代码语言:javascript
复制
    /// <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:

代码语言:javascript
复制
        //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并添加一个重载方法,如下所示:

代码语言:javascript
复制
    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中搜索并获取在任意多个应用程序之间进行同步所需的所有方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10513436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档