I think the Membership dream is really just a fantasy
Way back in early 2004, when I first got my hands on ASP.NET v2 and the Membership API, I though, wow, this is a seriously cool. What a dream come true to be able to plug this into any site and write your own provider. After all, isn't a single familiar and predictable interface to user data a good idea?
After much thought about the subject, I have to say that, no, it's not as great as I thought. Don't get me wrong, it certainly has its benefits for simple projects, but all of that flexibility ultimately constrains you. Oh the irony.
I started this year thinking, yep, this is the year I'm going to rewrite POP Forums, and dammit, I'm going to release it by the end of the year. The truth is that I have made some fabulous progress, and I'm starting to feel really good about the shape it's in. That said, the majority of my issues with the rewrite have had to do with user management, and trying to shoehorn it in to Membership.
I already ditched Profile, because I just didn't see any value in it anymore. It was an exercise that reminded me a lot of my first experiences with a DataGrid. Fabulous and flexible, but nearly worthless if you want to do any kind of clever UI or make something perform at a level you could respect. In the end it was almost always easier, and significantly faster, to roll your own solution with a good old fashioned Repeater, or your own templated, data-bound control.
The dream of Membership starts to become a nightmare as soon as you want to associate that data with other things. The system forces you to work in its little universe so that it can work the same with any provider. That creates a boundary from other data, and the simple SQL join becomes impossible because it would break compatibility with other providers.
So I think the time has come that I'm going to ditch the Membership component of the forum app. I have enough code coverage in unit tests that I think I can get away with the changes pretty quickly. I'm done trying to be clever and use ASP.NET to its fullest just for the sake of doing so. Maybe I've been drinking the 37signals Kool-Aid, but more simple is better.