ruby-on-rails - rails 5 : Devise Gem password Encryption

标签 ruby-on-rails ruby devise ruby-on-rails-5 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

这是我在我的 Controller 中使用的代码。

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 中放置/取消注释以设计使用密码加密。

class User < ApplicationRecord
  devise :database_authenticatable

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

end

PS:设计为此使用了两个属性:passwordpassword_confirmation

关于ruby-on-rails - rails 5 : Devise Gem password Encryption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097169/

相关文章:

ruby-on-rails - RSpec 没有为我的模型和 Controller 生成规范文件

ruby-on-rails - Devise + omniauth +carrierwave 不保存 facebook 个人资料图片

ruby-on-rails - 安装后无法立即找到 bcrypt

ruby-on-rails - Rails 协会扩展 : Override a HABTM assignment (collection=) method

ruby-on-rails - Rails 4 ActiveRecord,如果记录存在,则使用id,否则创建一个新记录

html - 用于验证 HTML 标记之间内容的正则表达式

android - Rhodes:无法检测到 NDK 工具链路径(损坏的 NDK 安装?)

ruby-on-rails - 对匿名用户隐藏链接

ruby-on-rails - Rails 数据库索引 : Is this an anti-pattern?

sql - 在数据库中清晰地表示电子商务产品和变体