簡體   English   中英

Rails 5:設計Gem密碼加密

[英]Rails 5 : Devise Gem password Encryption

我是Rails初學者。 我正在嘗試使用Devise gem保存密碼。 不知何故,我看到使用Bcrypt一個問題,根據我的建議,我選擇了Devise。

當我安裝Devise並嘗試保存密碼時,它被保存為簡單的簡單文本。 這是我正在使用的代碼。

config.rb

Rails.application.routes.draw do
  devise_for :users #This got added as part of Devise gem usage
  #....  Other different routes
   resources :users, except: [:new] # I am using users controller and generating routes except for new(Sign_up)
   get '/signup', to: 'users#new', as: 'signup' #This is route i wanted for signup
end

這是我在控制器中使用的代碼。

class UsersController < ApplicationController

    def new
        @user=User.new
    end
    def create
        @user=User.new(user_params)
        #@user=User.new(:password => @user.password).encrypted_password
        if @user.save
            flash[:success]="User "+@user.user_name+" created successfully"
            redirect_to users_path
        else
            render 'new'
        end
    end
    private
    def user_params
        params.require(:user).permit(:user_name,:password,:admin)
    end

end

這是我在DB中看到的。

User Load (4.0ms)  SELECT  "users".* FROM "users" LIMIT $1  [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<User id: 3, user_name: "admin", password: "admin", admin: "1", created_at: "2018-03-03 08:52:19", updated_at: "2018-03-03 08:52:19", sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil>, #<User id: 4, user_name: "admin2", password: "admin", admin: "1", created_at: "2018-03-03 08:52:36", updated_at: "2018-03-03 08:52:36", sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil>]>

我真的很想知道密碼加密的邏輯連接在哪里。 作為Rails的新手,我無法理解這是如何起作用的。

即使我可以看到last_sign_up ,而ip字段也是零。 Bcrypt自動完成。

我已經完成了Stackoverflow的一些解決方案,但無法將它們與我的問題聯系起來。

這是我的用戶模型:

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  #devise :database_authenticatable, :registerable,
   #      :recoverable, :rememberable, :trackable, :validatable

#has_secure_password
validates :password, presence: true
validates :user_name, presence: true, uniqueness: true

end

Abdul,只需在您的模型中添加/取消注釋devise :database_authenticatable to Devise use password encryption。

class User < ApplicationRecord
  devise :database_authenticatable

  #has_secure_password
  validates :password, presence: true
  validates :user_name, presence: true, uniqueness: true

end

PS:設計使用兩個屬性: passwordpassword_confirmation

要更改注冊頁面的路由,您只需要更改路由:

# top level of your routes.rb
Rails.application.routes.draw do
  devise_scope :user do
    # custom path to sign_up/registration
    get "/signup" => "devise/registrations#new", as: "new_user_registration" 
  end

  # Below for all other routes:
  devise_for :users
end

您無需創建自己的控制器來處理注冊。 你也不應該掌握自己的技能水平,因為在Devise中有很多事情要做,例如簽約用戶。

您還省略了將Devise模塊添加到您的用戶模型中,該模型添加了加密密碼的回調以及其他內容:

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

我建議您回滾並更仔細地遵循安裝步驟。 然后添加一些集成測試以確保其正常工作。 不要試圖重新發明輪子。

之后,您可以嘗試自定義它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM