Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Value cannot be null. Parameter name: value, CreateIdentityAsync?

I created a ViewModel(UserModel) that implement IUser<int> (for customizing ASP.NET Identity 2.0)

public class UserModel : IUser<int> {     public int Id { get; set; }      public string SecurityStamp { get; set; }      [Display(Name = "Name")]     public string FirstName { get; set; }      [Display(Name = "Last Name")]     public string LastName { get; set; }      public string FullName { get; set; }      [Display(Name = "Username")]     public string UserName { get; set; }      [DataType(DataType.Password)]     [Display(Name = "Password")]     public string Password { get; set; }      [Display(Name = "E-Mail")]     public string Email { get; set; }      [Display(Name = "Photo")]     public string PhotoPath { get; set; }      public List<Claim> Claims { get; set; }      [IgnoreMapping]     public List<CommentModel> Comments { get; set; } } 

Everything is well, but GenerateUserIdentityAsync method.
The following code is my GenerateUserIdentityAsync in UserModel:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<UserModel, int> manager) {     this.SecurityStamp = Guid.NewGuid().ToString();     this.Claims = new List<Claim>();      ClaimsIdentity userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);//Exception : Value cannot be null. Parameter name: value      return userIdentity; } 

An exception has occurred in CreateIdentityAsync method with the following stack trace

ArgumentNullException: Value cannot be null. Parameter name: value]    System.Security.Claims.Claim..ctor(String type, String value, String valueType, String issuer, String originalIssuer, ClaimsIdentity subject, String propertyKey, String propertyValue) +10798181    System.Security.Claims.Claim..ctor(String type, String value) +34    Microsoft.AspNet.Identity.<CreateAsync>d__0.MoveNext() +1458    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52    System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24    Smartiz.UI.Models.<GenerateUserIdentityAsync>d__2.MoveNext() in e:\Works\Smartiz\Smartiz.UI\Models\UserModels.cs:215    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52    System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24    Smartiz.UI.Controllers.<SignInAsync>d__58.MoveNext() in e:\Works\Smartiz\Smartiz.UI\Controllers\AccountController.cs:448    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52    System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21    Smartiz.UI.Controllers.<ExternalLoginCallback>d__3c.MoveNext() in e:\Works\Smartiz\Smartiz.UI\Controllers\AccountController.cs:315    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52    System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21    System.Threading.Tasks.TaskHelpersExtensions.ThrowIfFaulted(Task task) +61    System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +114    System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult) +66    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +117    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +323    System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +44    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +72    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +39    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651188    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

Could you please guide me where my wrong is ?

like image 979
Mohammad Dayyan Avatar asked Jul 28 '14 08:07

Mohammad Dayyan


2 Answers

I faced the same issue while upgrading from ASP.NET Identity 1 to ASP.NET Identity 2 and I solved it by putting a random string in the field SecurityStamp.

I found this solution here.

I hope it works for you too.

like image 115
user2536835 Avatar answered Oct 08 '22 21:10

user2536835


As Sam mentioned in his comment for the previous answer, my solution to this problem was to make sure that the user I was creating in in the Seed method of the EF Migration had something in the SecurityStamp. Once I did that and did a update-database -force, I was able to log in just fine.

context.Users.AddOrUpdate(u => u.UserName,                 new ApplicationUser                 {                     UserName = "demo",                     Email = "[email protected]",                     EmailConfirmed = true,                     PhoneNumberConfirmed = true,                     PasswordHash = password,                     PhoneNumber = "111-222-3344",                     SecurityStamp = Guid.NewGuid().ToString() //THIS IS WHAT I NEEDED                 }); 

If you created your user through some other means, you should be able to fix it by putting a string in the users db column via sql and have the same success.

like image 20
Kevin Heidt Avatar answered Oct 08 '22 23:10

Kevin Heidt