2016-09-07 23 views
2

こんにちは私はRailsアプリケーションを使用して、変更できないデータベースを持つ既存のプロジェクトにアクセスしています。だから私の質問Bcryptを使用してセッションを作成することができますpassword_digest私のDBには?、私のDBにはすでに列にパスワードを格納しているpasswordHas_secure_password rails password_digestをパスワードに変更する

は、ここに私のコード

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 

答えて

0

この間に合わせのサンプルを見てみましょうです。これにより、パスワードダイジェストに別の列を使用することができます。

既存の列を正しいハッシュ値に更新したり、必要に応じて別のアルゴリズムを使用するための適切なメソッドをオーバーライドする必要があります。

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 
関連する問題