You didn't mention a platform, but if you're using Python or Django, Python-Social-Auth[1] is quite good. It supports a bevy of third-party providers while still allowing for easy local (username/password or email/password) login types as well.
I had troubles with crypt on an older version of Node, but it's almost certainly been resolved by now.
[1] - http://passportjs.org/