Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Password can't be blank, Bcrypt

After installing Bcrypt on my Rails app, there is a validation problem :password=>"Can't be blank", even though form is filled out:

This is my User model

class User < ActiveRecord::Base   
  before_save { self.email = email.downcase }   
  validates :username, presence: true, length: { maximum: 50 }

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :email, presence:   true,
            format:     { with: VALID_EMAIL_REGEX },
            uniqueness: { case_sensitive: false }   
  has_secure_password   
  validates :password, length: { minimum: 6 } 
end

I've tried in the rails c and now the digest appears:

User.create:

User.create(username: "Riprova", email:"[email protected]", password: "nonfunzia", password_confirmation:"nonfunzia")

<User id: 15, username: "Riprova", name: nil, surname: nil, email: "[email protected]", gender: nil, birth: nil, created_at: "2013-08-11 15:35:03", updated_at: "2013-08-11 15:35:03", password_digest: "$2a$10$Q/5qtZYDXRcFsUWgve3JL.wui4hSHLhGgsuO0C6TTkBY...">

User controller:

class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]

  # GET /users
  # GET /users.json
  def index
    @users = User.all
  end

  # GET /users/1
  # GET /users/1.json
  def show
  end

  # GET /users/new
  def new
    @user = User.new
  end

  # GET /users/1/edit
  def edit
  end

  # POST /users
  # POST /users.json
  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render action: 'show', status: :created, location: @user }
      else
        format.html { render action: 'new' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /users/1
  # PATCH/PUT /users/1.json
  def update
    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /users/1
  # DELETE /users/1.json
  def destroy
    @user.destroy
    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:username, :name, :surname, :email, :bids_left, :bids_left_free, :gender, :birth)
    end
end
like image 924
Crazy Barney Avatar asked Jun 15 '26 05:06

Crazy Barney


1 Answers

If you're using Rails 3.x you need to add attr_accessible :password or that parameter will be disallowed. On Rails 4, see strong parameters. The password param is probably being filtered out. Others (like username) probably as well.

like image 191
Rocco Stanzione Avatar answered Jun 18 '26 00:06

Rocco Stanzione



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!