1: public override bool ValidateUser(string username, string password)
2: {
3: bool status = false;
4:
5: if( null==currentMigratingUser || currentMigratingUser.UserName!=username )
6: currentMigratingUser = InternalGetUser(username);
7:
8: if(null==currentMigratingUser)
9: return false;
10:
11: if(VerifyPassword(currentMigratingUser.Salt, currentMigratingUser.Hash, password))
12: {
13: // create user in the MigrateToProvider
14: MembershipCreateStatus createStatus;
15: MembershipUser user = MigrateToProvider.CreateUser(currentMigratingUser.UserName, password, currentMigratingUser.Email, null, null, true, null, out createStatus);
16:
17: status = createStatus == MembershipCreateStatus.Success;
18:
19: if(status)
20: {
21: // migrate roles
22: List<string> rolesToMigrate = new List<string>(currentMigratingUser.Roles);
23:
24: foreach( string role in currentMigratingUser.Roles )
25: {
26: // remove roles that dont exist in the roleprovider
27: if(!MigrateRolesToProvider.RoleExists(role))
28: rolesToMigrate.Remove(role);
29: }
30:
31: MigrateRolesToProvider.AddUsersToRoles(new string[] { currentMigratingUser.UserName }, rolesToMigrate.ToArray());
32:
33:
34: // reset current user at multiplexingprovider so its the newly created user thats considered logged in
35: // (and not the user returned by our MigratingMembershipUser.GetUser()-implementation
36: // this is to ensure that upcoming calls on RoleProvider succeeds in getting the roles for the user
37: MultiplexingMembershipProvider mp = Membership.Provider as MultiplexingMembershipProvider;
38: if(null!=mp)
39: mp.CurrentMembershipUser = user;
40: }
41: }
42:
43: return status;
44: }