2016-08-16 236 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")