2010-11-04 13 views
12

Zaimplementowałam omniauth w moim opracowanym modelu, dzięki czemu mogę uwierzytelniać za pomocą innych usług. Hasło nie jest już konieczne dla mojego modelu, ponieważ użytkownicy mogą uwierzytelniać za pomocą Twittera, Facebook ...Rails 3 - Devise: Jak pominąć "current_password" podczas edycji rejestracji?

Wszystko działa poprawnie, ale gdy użytkownik próbuje edytować swoją rejestrację, należy go pominąć, ponieważ użytkownik nie poinformować "current_password" (które obecnie nie istnieje).

stworzyłem kontroler rejestracyjny nadpisać wymyśla jedno:

class RegistrationsController < Devise::RegistrationsController 
    def update 
    super 
    end 
end 

Ale nie znaleźć żadnej dokumentacji na temat sposobu, aby pominąć weryfikację hasła, jak mogę to zrobić w moim działaniu aktualizacji?

Odpowiedz

34

Podobnie jak wyżej, spróbuj umieścić to w modelu użytkownika:

# bypasses Devise's requirement to re-enter current password to edit 
def update_with_password(params={}) 
    if params[:password].blank? 
    params.delete(:password) 
    params.delete(:password_confirmation) if params[:password_confirmation].blank? 
    end 
    update_attributes(params) 
end 
+0

naprawdę ładne. działa świetnie! – Tronic

+0

To działa! Dziękuję kocham cię! – rodrigoalves

+4

Warto dodać połączenie z 'clean_up_passwords'. Po zapisaniu ustawia atrybuty 'password' i' password_confirmation' na zero, aby zachować hasło użytkownika w tajemnicy. Zobacz referencję Devisego [update_with_password] (https://github.com/plataformatec/devise/blob/master/lib/devise/models/database_authenticatable.rb#L56). –

10

Następujące pracował dla mnie:

w moim kontrolera użytkowników w działania aktualizacji, mam

params[:user].delete(:password) if params[:user][:password].blank? 
params[:user].delete(:password_confirmation) if params[:user][:password_confirmation].blank? 

Być może dostosować to do before_save zwrotnego?

1

Nawet odpowiedzi został tu na chwilę chcę zakładać nowego, jak myślę, że wybrana odpowiedź ma trochę wad . Może to nie mają w tej chwili odpowiedź została stworzona, ale teraz w 2013, odpowiedź byłaby tak:

Rozwiązaniem byłoby stworzenie w User modelu jak ten:

# bypass re-entering current password for edit 
    def update_with_password(params={}) 
    current_password = params.delete(:current_password) 

    if params[:password].blank? 
     params.delete(:password) 
     params.delete(:password_confirmation) if params[:password_confirmation].blank? 
    end 
    update_attributes(params) 

    clean_up_passwords 
    end 
+0

Ale co byłoby w metodzie aktualizacji RegistrationsController #? –

+0

Nic. Kontroler rejestracji nie powinien być w ogóle tworzony. Rozwiązaniem byłoby tworzenie TYLKO w modelu użytkownika, tak jak w mojej odpowiedzi i nie tworzenie dodatkowych klas, jak to jest powiedziane w pytaniu. – Aleks

0

tam jest to łatwiejsze odpowiedź, nie wiem kiedy Devise pierwszy miał tę metodę, ale po prostu dodając

Model.update_without_password(params)

będzie aktualizować atrybuty bez konieczności aktualne hasło.

Powiązane problemy