【问题标题】:Has_secure_password rails change password_digest to passwordHas_secure_password rails 将 password_digest 更改为密码
【发布时间】:2016-09-07 20:40:06
【问题描述】:

您好,我正在使用我的 Rails 应用程序访问具有无法更改的数据库的现有项目。所以我的问题是如何使用Bcrypt 创建会话而不需要在我的数据库中拥有password_digest 列?我已经在我的数据库中存储了password 列中的密码。

这是我的代码

def create
     user = User.find_by(email: params[:session][:email].downcase)
     # user.update_attribute(:last_login, DateTime.now)
    if user && user.authenticate(params[:session][:password])
      log_in user

      flash[:success] = "Bienvenido de nuevo #{current_user.name.upcase}"
      redirect_to user
    else
      flash[:danger] = 'Email invalido/Contrasena incorrecta' # Not quite right!
      render 'new'
    end

  end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4


    【解决方案1】:

    看看这个快速而肮脏的示例。它将允许您使用另一列作为密码摘要。

    如果需要,您仍需要将现有列更新为正确的哈希值和/或覆盖适当的方法以使用其他算法。

    has_secure_password 代码非常简单,因此您可以将其用作模板来推出适合您情况的身份验证。

    require 'active_record'
    require 'active_model'
    
    login = 'jdoe'
    password = '12345678'
    wrong_password = 'abcdefgh'
    
    ActiveRecord::Base.establish_connection(
      adapter:  'sqlite3',
      database: 'test.db'
    )
    
    unless ActiveRecord::Base.connection.table_exists?(:users)
      ActiveRecord::Base.connection.create_table :users do |t|
        t.string :username
        t.string :some_other_digest_column_name
      end
    end
    
    class User < ActiveRecord::Base
      has_secure_password
      alias_attribute :password_digest, :some_other_digest_column_name
    end
    
    unless User.where(username: login).any?
      User.create(username: login, password: password)
    end
    
    user = User.where(username: login).first
    
    puts 'Using correct password:'
    
    if user.authenticate(password)
      puts 'User successfully authenticated!'
    else
      puts 'User not authenticated.'
    end
    
    puts
    puts 'Using wrong password:'
    
    if user.authenticate(wrong_password)
      puts 'User successfully authenticated!'
    else
      puts 'User not authenticated.'
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-02
      • 2017-12-07
      • 2015-10-26
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2013-09-17
      • 2015-03-15
      相关资源
      最近更新 更多