2011-02-20 16 views
5

Kullanıcıları doğrulamak için OmniAuth ve Devise kullanıyorum. İsteğe bağlı bir parola (API kimlik doğrulaması için gerekli) ayarlayabilmek için OmniAuth sağlayıcılarını kullanarak kaydolmuş kullanıcıları istiyorum, ancak bir duvara koşuyorum. Ben şifre boştur, çünkü bu olduğuna inanıyoruzOmniAuth ve Devise, isteğe bağlı parolalar nasıl ayarlanır

BCrypt::Errors::InvalidHash in RegistrationsController#update 

: Bir kullanıcı OmniAuth aracılığıyla bir hesap oluşturur ve aşağıdaki hatayı alıyorum bir şifre ayarlamak çalışırsa

. Bunun iyi bir yolu nedir? Rastgele bir şifre oluşturmayı düşündüm ama bu yaklaşımdaki problem, kullanıcının ayarları düzenlemek için mevcut şifreyi bilmesi gerektiğidir.

Düzenleme: Ben allowing the user to change settings without requiring a current password bakıp ben kullanıcı başlangıçta bir şifre olmasaydı sadece yapmak istiyorum budur.

cevap

3

Kolay bir şekilde çıkış yapmak istemediyseniz, şifreyi sıfırlamak isteyip istemediğinizi düşünmüyor musunuz?

user.send_reset_password_instructions

+0

Evet Başlangıçta bunu yapmak istemedim, ancak bu şekilde bitirdim. – David

5

alternatif Sağlayıcı harici kimlik doğrulaması kullanılırken ayarlanır bazı alandır nerede doğrulamak için şifre yok yoksa şifre doğrulaması atlamak için 'kullanıcı' modeli sınıfa aşağıdaki eklemektir.

0

Başka bir alternatif. Yeni bir alan eklemeniz gerekmez. Sadece yükseltilen istisnayı yakala ve yanlış döndür. İşte kod.

def valid_password?(password) 
    begin 
     super(password) 
    rescue BCrypt::Errors::InvalidHash 
     return false 
    end 
end 

Bu, işi yapmalıdır.

1

Biraz geç geliyor ama bu bir başkasına yardım edebilir, Andrew'un cevabıyla bir şifre oluşturabilir ve veritabanında saklayabilirsiniz, ancak e-postanızı ve yeni şifrenizi kullanarak giriş yapamazsınız, bu ayarı ayarlayarak çözebilirsiniz :

def valid_password 
    !provider.nil? && !encrypted_password.present? || super 
    end