Izzy
Izzy

Reputation: 6866

UserManager Keeps throwing a System.ArgumentNullException

I am trying to implemented the standard Id in AspNetUsers from nvarchar to int. I've manage to get that side working. However my issue is when I try to login I keep getting an error from the UserManager class.

My code is below:

public class UserManager : UserManager<ApplicationUser, int>
{
    public UserManager(IUserStore<ApplicationUser, int> store) 
    : base(store) 
{ 
}

And on the login page I've got

if (IsValid)
        {
            // Validate the user password
            var manager = Context.GetOwinContext().GetUserManager<UserManager>();
            var user = manager.Find(UserName.Text, Password.Text); //This line throws the error
            if (user != null)
            {
                IdentityHelper.SignIn(manager, user, isPersistent: false);
                Response.Redirect("~/Home.aspx");                }
            else
            {
                FailureText.Text = "Invalid username or password.";
                ErrorMessage.Visible = true;
            }
        }

The error I keep getting is System.ArgumentNullException: Value cannot be null. Parameter name: manager. Has anyone else come across this issue? Thanks in advance for your help

Stack Trace

[ArgumentNullException: Value cannot be null.
Parameter name: manager]
Microsoft.AspNet.Identity.UserManagerExtensions.Find(UserManager`2 manager, String userName, String password) +221
Account_Login.LogIn(Object sender, EventArgs e) in Login.aspx.cs:17
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628026
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.<ProcessRequestMainAsync>d__14.MoveNext() +5226

Upvotes: 9

Views: 8793

Answers (3)

I think the problem comes from the very basic of setups. Can you check that you're user manager is registered in your OWIN context. And In any case you've extended the Identity ApplicationUser attributes, please do ensure that you've made them public and that they have getters and setters.

Upvotes: 0

xwpedram
xwpedram

Reputation: 567

the manager.Find() method only search in primary key of table, you must use something like :

Context db = new Context();
if (db.Users.Select(u => u).Where(u => u.Username == Username && u.Pass == Password).ToList().Count() == 1)
{
      // login
}

Upvotes: 2

Sergey Kolodiy
Sergey Kolodiy

Reputation: 5909

Make sure that UserManager is registered in you OWIN context. You should have something like this in your Startup class:

app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

Also ensure that you have [assembly: OwinStartup(typeof(YourNamespace.Startup))] attribute applied to your web assembly.

Upvotes: 15

Related Questions