2015-08-24 17 views
9

W naszej aplikacji mamy normalnych użytkowników. Chcemy jednak móc tworzyć zaproszenia, zapraszać określone osoby. Pamiętaj, że zaproszenie jest bezpośrednio powiązane z użytkownikiem, ponieważ chcemy już mieć możliwość ustawienia pewnych ustawień dla tych użytkowników. (Ograniczamy klientów z naszego starego oprogramowania do nowego).Wymyślanie: Tworzenie użytkowników bez hasła

Więc:

  • Administrator powinien być w stanie utworzyć nowego użytkownika i zmienić jego ustawienia.
  • Gdy ktoś podąży za linkiem ze swoim numerem invitation_token, powinien zobaczyć formularz, w którym może ustawić hasło do swojego konta.

Z czym mam problem, to w jaki sposób umożliwić administratorowi utworzenie konta użytkownika, z pominięciem zwykłego sprawdzania poprawności hasła. Byłoby okropnym rozwiązaniem, gdyby trzeba ustawić domyślne hasło, ponieważ spowodowałoby to poważną lukę bezpieczeństwa.

Jak utworzyć nowego użytkownika w Devise bez podania hasła?

+0

Czy widzisz błąd wiązania bazy danych lub jest twój nowy rekord użytkownik po prostu nie obowiązuje ''? – Josh

Odpowiedz

30

Istnieją co najmniej dwa sposoby, aby robić to, co chcesz:

Metoda 1: password_required? metoda

przeciążenie opracować za

class User < ActiveRecord::Base 
    attr_accessor :skip_password_validation # virtual attribute to skip password validation while saving 

    protected 

    def password_required? 
    return false if skip_password_validation 
    super 
    end 
end 

## Saving: 
# 
user.skip_password_validation = true 
user.save 

Metoda 2:

Disable sprawdzanie poprawności z opcją validate: false n:

user.save(validate: false) 

Pominie to sprawdzanie poprawności wszystkich pól (nie tylko hasła). W takim przypadku upewnij się, że wszystkie pozostałe pola są prawidłowe.

...

Ale radzę nie tworzyć użytkowników bez hasła w danym przypadku. Stworzyłem dodatkową tabelę (na przykład: invitations) i zapisałem wszystkie wymagane informacje, w tym pola, które mają zostać przypisane do użytkownika po potwierdzeniu.

+1

Interesujące byłoby wyjaśnienie, dlaczego nie zaleca się tworzenia użytkowników bez hasła. – Pak

+0

@Pak Zaleca się, aby nie tworzyć użytkowników bez hasła w tej konkretnej sytuacji. Utrzyma twój DB w stanie czystym i znormalizowanym oraz zapobiega problemom z dostosowywaniem Devise. – chumakoff

3

TL; DR:

user.define_singleton_method(:password_required?) { false } 

Fiddle

class MockDeviseUser 
    protected 
    def password_required? 
    true 
    end 
end 

class User < MockDeviseUser 
    def is_password_required? 
    puts password_required? 
    end 
end 

unrequired_password_user = User.new 
unrequired_password_user.define_singleton_method(:password_required?) { false } 
unrequired_password_user.is_password_required? 
regular_user = User.new 
regular_user.is_password_required? 
#false 
#true 
Powiązane problemy