获取错误使用Ruby on Rails 3,密码摘要不能为空

时间:2015-04-06 06:24:01

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

尝试使用Rails 3注册一个表单时出现以下错误,并且在验证过程进行时会出现此错误。

错误:

1 error prohibited this post from being saved:
Password digest can't be blank

我在登录页面中还记得我的功能。请检查我的以下代码,并尝试帮我解决此错误。

控制器/ admins_controller.rb

class AdminsController < ApplicationController
    def create_registration
        @admin=Admin.new(params[:admin])
        if @admin.save
            flash[:notice]="User has created successfully"
            flash[:color]="valid"
            redirect_to :action => "index" , :controller => 'homes'
        else
            flash[:alert]="User could not created"
            flash[:color]="invalid"
            render 'homes/index'
        end
    end
    def forget
        @admin=Admin.new
    end
    def resetpass
        @admin=Admin.find_by_email(params[:admin][:email])
        if @admin.email==params[:admin][:email]
            UserMailer.registration_confirmation(@admin).deliver
            flash[:notice]="Check your email to reset the password"
            flash[:color]="valid"
            redirect_to :action => "index" , :controller => 'homes'
        else
            flash[:alert]="Invalid email id"
            flash[:color]="invalid"
            render 'homes/index'
        end
    end
    def editpass
        @admin=Admin.new
    end
    def setpass
        @admin=Admin.find(params[:id])
        if @admin.update_attributes(params[:admin])
            flash[:notice]="Your password has updated successfully"
            flash[:color]="valid"
            redirect_to :action => "index" , :controller => 'homes'
        else
            flash[:alert]="Your password could not updated"
            flash[:color]="invalid"
            render 'editpass'
        end
    end
end

模型/ admin.rb

class Admin < ActiveRecord::Base
  attr_accessible :email, :password_hash, :password_salt, :picture, :user_name,:password_confirmation,:password, :remember_me
  attr_accessor :password
  attr_accessor :remember_token
  before_save :encrypt_password
  mount_uploader :picture, PictureUploader
  EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
  validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
  validates :password, presence: true, length: { minimum: 6 }
  validates :password_confirmation, presence: true
 has_secure_password
 def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
  end
  def self.authenticate(email, password)
    user = find_by_email(email)
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
      user
    else
      nil
    end
  end
   def Admin.digest(string)
    cost = 10
    BCrypt::Password.create(string, cost: cost)
  end

  # Returns a random token.
  def Admin.new_token
    SecureRandom.urlsafe_base64
  end

  # Remembers a user in the database for use in persistent sessions.
  def remember
    self.remember_token = Admin.new_token
    update_attribute(:remember_digest, Admin.digest(remember_token))
  end
  def forget
    update_attribute(:remember_digest, nil)
  end
end

的观点/舍/ index.html.erb

<div class="container">
    <div style="text-align:center;"><img src="/assets/admin.png" style="width:100px; height:120px; " /></div>
    <div class="text-div" style="text-align:center;">Swargadwar, Puri Municipality,govt of odisha</div>
            <section>
            <% if !current_user %>              
                <div id="container_demo" >
                    <!-- hidden anchor to stop jump http://www.css3create.com/Astuce-Empecher-le-scroll-avec-l-utilisation-de-target#wrap4  -->
                    <a class="hiddenanchor" id="toregister"></a>
                    <a class="hiddenanchor" id="tologin"></a>
                    <div id="wrapper">
                        <div id="login" class="animate form">
                            <%= form_for :admin,:url => {:action =>'loginadmin',:controller => 'sessions' } do |f| %>
                                <h1>Log in</h1> 
                                <p> 
                                    <label for="username" class="uname" data-icon="u" > Your email or username </label>
                                     <%= f.email_field :email,placeholder:"mysupermail@mail.com",:id => "username" %>
                                </p>
                                <p> 
                                    <label for="password" class="youpasswd" data-icon="p"> Your password </label>
                                     <%= f.password_field :password,placeholder:"eg. X8df!90EO",:id => "password" %>
                                </p>
                                <p class="keeplogin"> 
                                    <%= f.check_box :remember_me,:id => "loginkeeping" %>
                                                   <label for="loginkeeping">Keep me logged in</label>
                                 <%= link_to 'Forgetting password ?',admins_forget_path %>
                                                </p>
                                <p class="login button"> 
                                    <%= f.submit "Login" %>
                                </p>
                                <p class="change_link">
                                    Not a member yet ?
                                    <a href="#toregister" class="to_register">Join us</a>
                                </p>
                                <% end %>
                            </form>
                        </div>

                        <div id="register" class="animate form">
                            <%= form_for :admin,:url => {:action => 'create_registration',:controller => "admins" } do |f| %>
                                <h1> Sign up </h1> 
                                <p> 
                                    <label for="usernamesignup" class="uname" data-icon="u">Your username</label>
                                    <%= f.text_field :user_name,placeholder:"mysuperusername690",:id => "usernamesignup" %>
                                </p>
                                <p> 
                                    <label for="emailsignup" class="youmail" data-icon="e" > Your email</label>
                                     <%= f.email_field :email,placeholder:"mysupermail@mail.com",:id => "emailsignup" %>
                                </p>
                                <p> 
                                    <label for="passwordsignup" class="youpasswd" data-icon="p">Your password </label>
                                    <%= f.password_field :password,placeholder:"eg. X8df!90EO",:id => "passwordsignup" %>
                                </p>
                                <p> 
                                    <label for="passwordsignup_confirm" class="youpasswd" data-icon="p">Please confirm your password </label>
                                    <%= f.password_field :password_confirmation,placeholder:"eg. X8df!90EO",:id => "passwordsignup" %>
                                </p>
                                <p>
                                     <label for="usernamesignup" class="uname" data-icon="u">Add Image</label>
                                     <%= f.file_field :picture %>
                                </p>
                                <p class="signin button">
                                <%= f.submit "Sign Up"%> 
                                </p>
                                <p class="change_link">  
                                    Already a member ?
                                    <a href="#tologin" class="to_register"> Go and log in </a>
                                </p>
                                <% end %>
                        </div>
                        <div class="error-div">
                                    <% if @admin.errors.any? %>
                                      <div id="error_explanation">
                                      <h2><%= pluralize(@admin.errors.count, "error") %> prohibited this post from being saved:</h2>

                                      <ul>
                                      <% @admin.errors.full_messages.each do |msg| %>
                                     <li><%= msg %></li>
                                     <% end %>
                                     </ul>
                                    </div>
                                  <% end %>
                               </div>
                    </div>
                </div> 
                 <% end %> 
            </section>
        </div>

的Gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.19'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'mysql'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
#gem 'bcrypt-ruby', :require => 'bcrypt'
gem 'bcrypt-ruby', '~> 3.0.0'
# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'
gem 'carrierwave'

我还在admin模块中添加了remember_me,remember_digest,password_digest等字段。请帮我解决上述错误。

0 个答案:

没有答案
相关问题