To get to the point, and not force anyone to read a lengthy explanation, I've known there's issues with Microsoft's security defaults when it comes to many of its technologies. I use ASP.NET and MVC, and actually was ready to use Microsoft's defaults (like IdentityService) - and was looking into it's more advanced features - so I can master them. But then I stumbled upon Brock Allen's blog post - where he explained Microsoft's defaults in these regards are just not good enough. So, that was where I found out about his MembershipReboot project.
I've been in the process of implementing this library, at first with not so much success, but have been gaining traction, and have had some success. I went from it not working at all, to having di issues. I fixed all that (with a little help). Now, the login and register pages work, and registration works as well as sending out verification emails, they all work. This is where I'm now stuck at. After receiving the verification email, and clicking the link in the email - I go to the localhost:####/ChangeEmail/(verification key) page - and this is where my new problem is. I'm using some of the code taken from the (SingleTenant) sample code.
When it goes to that page, in the default setup, it told me it had "System.ArgumentException: account" and it pointed to the code "if (account.HasPassword())" in the Confirm ActionResult of the ChangeEmailController. I added a line of code above that if statement in that ActionResult - "Redirect("http://" + account.Email);" - just to see what it would do with that. With that addition, it gave me another (related) error - "Object reference not set to an instance of an object." and it pointed to that exact code I added.
So, it really frustrates me, it's obvious that the system works in loading the library, it works in being able to actually register a user, it works in being able to send an email with the proper verification key (I compared it to the database entry, it was the same code). But, then when the link to the verification method is clicked on - it doesn't seem to want to retrieve that same account data from the database. I find this to be pretty strange.