2016-08-16 186 views
-1

我正在使用新的Rails应用程序,并且我正在添加自定义值来设计。 我加first namelast nameusernamephone,并且user roles边做边设计注册以下内容:Rails自定义设计登录/注册

app/controllers我创建registrations_controller.rb,并添加了

如下:

classRegistrationsController < Devise: RegistrationsController 

     private 

     def sign_up_params 
      params.require(:user).permit(:fname, :lname, :username, :phone:, :email, :password:, :password_confirmation, :admin, :rgroup, :rlab) 
     end 
    end 

在我的路线.rb我加:

devise_for :users, :controllers => { registrations 'registrations', sessions 'sessions' } 

现在,我卡住了。

我在我的应用程序/控制器上创建sessions_controller.rb和文件中我有:

class SessionsController < Devise::SessionsController 

    private 

    def sign_in_params 

    end 

end 

而我想要的是能够与用户名或邮箱登录。但我没有想法如何写这个,网上的大多数例子都让我感到困惑。

你们有没有一些提示?

+1

您应首先检查文档正常。 - https://github.com/plataformatec/devise/wiki/How-Tos - 找到它,实施它,然后问如果你发现任何问题。 – arjun

回答

1

首先来看看Devise custom login

举个例子,你可以做你的用户模型如下:

class User < ActiveRecord::Base 
    validate :validate_username 

    attr_accessor :login 

    def self.find_for_database_authentication(warden_conditions) 
    conditions = warden_conditions.dup 
    # conditions[:email].downcase! if conditions[:email] 
    collection = with_deleted.where(conditions.to_hash.except(:login)) 
    if conditions[:login] 
     value = conditions[:login].downcase 
     collection = collection.where("username = :value OR email = :value", value: value) 
    end 
    return unless record = collection.first 
    record.restore(recursive: true) if record.deleted? 
    record 
    end 

    def login 
    @login || username || email 
    end 

    private 

    def validate_username 
    if User.where(email: username).exists? 
     errors.add(:username, :invalid) 
    end 
    end 
end 

您应该添加以下到您的ApplicationController:

class ApplicationController < ActionController::Base 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    added_attrs = %i(username first_name last_name phone user_role email password password_confirmation remember_me) 
    devise_parameter_sanitizer.permit :sign_up, keys: added_attrs 
    devise_parameter_sanitizer.permit :account_update, keys: added_attrs 
    end 
end 

将此项添加到您的config/initializers/devise.rb

config.authentication_keys = [ :login ] 

而在你的看法(假设你使用HAML):

= simple_form_for resource, as: resource_name, url: session_path(resource_name) do |f| 
    .form-inputs 
    = f.input :login, autofocus: true 
    = f.input :password, hint: "" 
    = f.input :remember_me, as: :boolean if devise_mapping.rememberable? 
    .form-action 
    = submit_tag("Login")