
Ciekawe, praktykowałeś?
Jestem zdecydowanie za 
Zwykle (nie we wszystkich projektach) tworzenie osobnej klasy autentykacji jest dobrym wyjściem. Ma to też duże + jeżeli w przyszłości zdecydujemy się na inne formy autentykacji (SSO, etc.)
Natrafiłem na tę prezentację przez Twittera parę dni temu i od razu mnie urzekła. Sam zwykle pchałem devise do modelu User, ale poza autentykacją niczym się ten model nie zajmował. “Logiczny” użytkownik był w UserProfile albo Member. Natomiast stosowałem to wyłącznie na podstawie przeczucia, a zawsze lepiej, kiedy ktoś uargumentuje, że moja intuicja była słuszna 
Ja stosuje troche inne podejscie.
Obiekt User jest jedynie obiektem sprzezonym z devise + zawiera w sobie relacje i walidacje pol. Cala reszte przerzucam do klas/uslug zajmujacych sie konkretnymi problemami.
Oczywiscie masz racje jesli chodzi o problem testowania - natomiast moje rozwiazanie na pewno pozwala mi na rozdzielenie odpowiedzialnosci - jedna odpowiedzialnosc jedna klasa.
Twoje podejscie zastosowalem raz - gdy faktycznie dostep do systemu mogl byc z wielu niezaleznych zrodel (wewnetrzna platforma crm) - wtedy wydzielilem calkowicie modul autentykacji i praw dostepu.
Dziekuje za ciekawy wpis!