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