2017-01-17 8 views
0

Я хотел бы создать веб-приложение на основе рубинов на рельсах. Для аутентификации я использую devise. Все хорошо: я могу создавать учетные записи, логин, выход из системы и т. Д.Рубины на рельсах - объявлять регистрацию пустым паролем

Но здесь у меня проблема. Я хотел бы иметь возможность зарегистрироваться без предоставления пароля, но у меня есть возможность зарегистрироваться с паролем для другой учетной записи.

Я установил пароль длину от 0 до 128 на конфигурации/инициализаторах/devise.rb

config.password_length = 0..128 

Но каковы дальнейшие шаги, чтобы сделать то, что я хочу?

Спасибо

+0

Попробуйте следующее: http://stackoverflow.com/questions/23857049/in-rails-when-using-the-devise-gem-how-to-create-a-user-without-email-and-passwo –

ответ

0

Хорошо, я отвечаю здесь как ответ.

Благодаря Ammar Shah я выяснил, как получить пользователей с паролем и пользователями без пароля.

Прежде всего создать файл в Lib/разработать/стратегии (создание папок) с именем database_authenticatable.rb с помощью следующего кода:

require 'devise/strategies/authenticatable' 

module Devise 
    module Strategies 
    # Default strategy for signing in a user, based on their email and password in the database. 
    class DatabaseAuthenticatable < Authenticatable 
     def authenticate! 
     if password.blank? 
      authentication_hash[:encrypted_password] = '' 
     end 
     resource = mapping.to.find_for_database_authentication(authentication_hash) 
     hashed = false 

     if validate(resource){ hashed = true; resource.valid_password?(password) } 
      remember_me(resource) 
      resource.after_database_authentication 
      success!(resource) 
     end 

     mapping.to.new.password = password if !hashed && Devise.paranoid 
     fail(:not_found_in_database) unless resource 
     end 
    end 
    end 
end 

Warden::Strategies.add(:database_authenticatable, Devise::Strategies::DatabaseAuthenticatable) 

Тогда в devise_create_user.rb миграции добавить :

t.string :remember_token 

Наконец в user.rb модель:

before_create :remember_value 

def valid_password?(password) 
    if password.blank? 
     true 
    else 
     super 
    end 
end 

def password_required? 
    new_record? ? false : super 
end 

def remember_value 
    self.remember_token ||= Devise.friendly_token 
end 

Спасибо Ammar Shah за то, что помогли мне!

0

Сброс длины пароля в конфигурационном/инициализаторах/devise.rb значение по умолчанию и использовать this answer сделать пароль необязательны.

Кроме того, здесь представлена ​​полная реализация gradual engagement feature в разработке вики. Это зависит от того, чего именно вы хотите достичь.

+0

Это работает для регистрации. Поэтому у меня есть мой пользователь в базе данных с зашифрованным паролем. Но я не могу войти без пароля. Это приведет к ошибке ** недействительной **. – utiiz

+0

Конечно, вы не можете. Вы хотели иметь возможность просто зарегистрировать своего пользователя без пароля и не подписываться? Это не так, как разрабатывается, вам нужен способ установить пароль для каждого пользователя в конце концов, поэтому я упомянул о реализации функции постепенного участия. –

+0

Хорошо, но реализация функции постепенного участия, о которой вы указали, просит у пользователя предоставить пароль, когда он хочет подтвердить свою учетную запись. Но этого я не хочу. Так что у меня нет возможности использовать devise и войти без пароля и не просить пользователя предоставить пароль? – utiiz