ArgumentOutOfRangeException after programmaticaly creating a user and trying to connect to umbraco with said user
Hi,
I have a webservice that creates users for me using a pre-existing database. I can create the users and everything is fine. When I connect to Umbraco (using a user account that wasn't created by my program), I can see all of my users. But when I try to log in with one of the account I created, it gives me this error (and doesn't connect).
System.ArgumentOutOfRangeException: Index and length must refer to a location within the string. Parameter name: length
Stacktrace
at System.String.Substring(Int32 startIndex, Int32 length)
at Umbraco.Core.Security.MembershipProviderBase.StoredPassword(String storedString, String& salt)
at Umbraco.Core.Security.MembershipProviderBase.CheckPassword(String password, String dbPassword)
at Umbraco.Core.Security.MembershipPasswordHasher.VerifyHashedPassword(String hashedPassword, String providedPassword)
at Microsoft.AspNet.Identity.UserManager`2.<VerifyPasswordAsync>d__3e.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNet.Identity.UserManager`2.<CheckPasswordAsync>d__17.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Umbraco.Core.Security.BackOfficeUserManager`1.<CheckPasswordAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Umbraco.Core.Security.BackOfficeSignInManager.<PasswordSignInAsyncImpl>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Umbraco.Core.Security.BackOfficeSignInManager.<PasswordSignInAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Umbraco.Web.Editors.AuthenticationController.<PostLogin>d__f.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__3`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()
I think the problem is because of the password, but I've tried with numerous password lengh, and it doesn't change anything. No special characters either.
Here's the code I've used :
public string CreateAppUser(int id, string networkUserAccess, string firstName, string lastName, string password, bool isAdmin)
{
Umbraco.Core.Services.IUserService UserService = ApplicationContext.Current.Services.UserService;
//generate a temporary email
string emailAddress = string.Format("{0}.{1}@temporary.com", firstName, lastName);
try
{
if (UserService.GetByEmail(emailAddress) == null)
{
//creer le user
IUser newUser = UserService.CreateWithIdentity(networkUserAccess,
string.Format("{0}.{1}@temporary.com", firstName, lastName),
password, (isAdmin) ? "admin" : "editor");
//change parameters
newUser.Id = id;
UserService.Save(newUser);
return string.Format("User {0} successfuly created", newUser.Name);
}
return "The user's email (ID " + id + ") was already taken. The user hasn't been created";
}
catch (Exception ex)
{
return "The user (ID " + id + ") couldn't be created : " + ex.Message;
}
}
ArgumentOutOfRangeException after programmaticaly creating a user and trying to connect to umbraco with said user
Hi,
I have a webservice that creates users for me using a pre-existing database. I can create the users and everything is fine. When I connect to Umbraco (using a user account that wasn't created by my program), I can see all of my users. But when I try to log in with one of the account I created, it gives me this error (and doesn't connect).
I think the problem is because of the password, but I've tried with numerous password lengh, and it doesn't change anything. No special characters either.
Here's the code I've used :
Does anyone know what the problem is?
Try using the Umbraco member service and save the password explicitly:
umbracoMemberService.SavePassword(member, password);
is working on a reply...