There are various Rails plugins that take care of most of this stuff. I've had great success with restful_authentication (http://github.com/technoweenie/restful-authentication)
Making all of those features Samparicio said would be a little tough for code reuse. Engines feature was planned for Rails 3.0 beta but pushed to 3.x. That's the feature that can help code reuse. But it's possible to do this neatly on Django, which allows component-based architecture for apps.
Authlogic and forgotten passwords is pretty simple, though. It sort of gives it to you. Well, it gives you the tools. It's really only a tiny bit of coding.
I'll certainly check out Devise though.