mercredi 13 avril 2016

Hash password not saved in the password column

I am trying to store hash password in my users table while registration. Please see my code:

users_controller.rb

def register
    @user = User.new
    @title = 'Register'
  end

  def create_register
    params[:user][:uniq_id] = generate_uniq
    @user = User.new(create_user_params)
    #raise @user.inspect
    respond_to do |format|
      if @user.save
        format.html { redirect_to :success, success: 'Registration was successfully created.' }
        format.json { redirect_to :register, status: :created, location: @users }
      else
        format.html { render :register }
        format.json { render json: @users.errors, status: :unprocessable_entity }
      end
    end
  end

private

def create_user_params
    params.require(:user).permit(:uniq_id, :name, :username, :email, :password, :password_confirmation, :password_salt, :dob, :address)
  end

register.html.erb

<%= form_tag("/register", method: "post") do %>
        <%#= form_tag(@user) do |f| %>
         <% if @user.errors.any? %>
          <div id="error_explanation">
            <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
            <ul>
              <% @user.errors.full_messages.each do |message| %>
                <li><%= message %></li>
              <% end %>
            </ul>
          </div>
        <% end %>


          <%= text_field :user, :name, placeholder:'NAME', required: true %>
          <div style="position: relative;">
            <span id="chk-username" style="position: absolute;font-size: 12px;right: 2%; bottom: 5%; z-index: 9; display: block;"></span>
            <%= text_field :user, :username, placeholder:'USERNAME', 'data-validate':"/users/check_username", required: true %>
          </div>
          <div style="position: relative;">
            <span id="chk-email" style="position: absolute;font-size: 12px;right: 2%; bottom: 5%; z-index: 9; display: block;"></span>
            <%= text_field :user, :email, placeholder:'EMAIL', 'data-validate':"/users/check_email", required: true %>
          </div>
          <%= password_field :user, :password, placeholder:'PASSWORD', required: true %>  
          <%= password_field :user, :password_confirmation, placeholder:'CONFIRM PASSWORD', required: true %> 
          <div class="submit">
            <input type="submit" value="REGISTER" >
            <input type="button" onclick="location.href = '<%= request.base_url %>/login'" value="LOGIN" >
          </div>    
          <p><a href="#">Forgot Password ?</a></p>
<% end %>

user.rb

class User < ActiveRecord::Base
  #has_secure_password

  attr_accessor :password
  before_save :encrypt_password

  validates :name, presence: true


  validates :name, length: { minumum:2, maximum: 30 }

  validates :password, :presence =>true,
    :length => { :minimum => 6, :maximum => 40 },
    :confirmation =>true

  validates :username, :presence => true,
    :uniqueness => { :case_sensitive => false }

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, :presence => true,
    :format => { :with => email_regex },
    :uniqueness => { :case_sensitive => false }


  def self.authenticate(input_username, input_password)
    user = find_by_username(input_username)
    if user && user.password == BCrypt::Engine.hash_secret(input_password, user.password_salt)
      user
    else
      nil
    end
  end

  def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password = BCrypt::Engine.hash_secret(password, password_salt)
    end
  end
end

routes.rb

get    'register'   => 'users#register'
post   'register'   => 'users#create_register'

Here is my database table.

users.sql (customize table)

+----+----------+------------+-----------+----------------+
| id | name     | username   |  password |  password_salt |
+----+----------+------------+-----------+----------------+
|  1 | chinmay  | chinu      | NULL      |$2a$10$15fWDt.. |
|  2 | sanjib   | sanjib     | NULL      |$2a$10$85DyMr.. |
+----+----------+------------+-----------+----------------+

I get NULL value in my password column. Please help me and let me know where the error is in my code.

Aucun commentaire:

Enregistrer un commentaire