In Rails, :except and :only are super useful on filters.
Also, another possibility is to noun-ify some verbs. (Some may prefer to call it resource-ification, or REST-ification)
For example, you could create a PasswordResetRequest model, which handles all of the logic for checking the old password, the password confirmation, the new password's complexity, etc. Then it would be responsible for executing the actual password change as well.
As a bonus, noun-ification enables easy logging because you'll already have a data structure to store.
Here is a simple example for hooking in route-specific middlewares: https://gist.github.com/978411#file_express_middlewares.coff...
You could achieve it by catering for these cases in your logic if user.authorize(email, pass): ... success ... else: ... fail ...
rather than try: user.authorize(email, pass) ... success ... except WrongPasswordException: ... fail ...
User.authorize(username, password) -> Returns true if valid username/password -> Returns false if username/password do not match -> Raises AccountDisabled if username/password valid but account disabled
The normal login failure case is not exceptional - but the others are.
Then again, stuff like authentication and authorization (two separate concepts!) are often better handled on some middleware or service layer than in models and controllers.
Let's say I add a few more things to that controller: namely ability to check if account is disabled(and to disable after x attempts and notify user) or if a captcha needs to be shown or was shown etc.
I feel before you know it the controller can get fairly complicated with all the asserts in real-life scenarios. May be the orig author is ok with it but reading the post I started getting ideas about simple 5-10 line controllers.