Devise-Rails 4-无法登录

Asw*_*nan 5 ruby ruby-on-rails devise ruby-on-rails-4

我刚刚开始使用Rails4。我已经devise设置了自定义字段。注册后可以登录,但是无法从登录页面登录。用户注册进行得很好,并且数据库表中有usernamepassword等等。

有人可以告诉我我所缺少的吗?我的用户模型非常基础。这是它的样子-

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  validates :username, :uniqueness => true, :presence => {:message => '- Username cannot be blank'}
  validates :first_name, :presence => { :message => " - Firstname cannot be blank!"}    

  private
    def user_params
        params.require().permit(:first_name, :last_name, :username, :email, :password, :password_confirmation)
    end
end
Run Code Online (Sandbox Code Playgroud)

我已经检查了视图,并传递了正确的参数。

我的应用程序控制器中有以下内容-

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  layout :layout_by_resource

  before_filter :configure_permitted_params, if: :devise_controller?

  def layout_by_resource
    if devise_controller?
        "devise"
    else
        "application"       
    end
  end

  protected

  def configure_permitted_params
    devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:username, :first_name, :last_name, :password, :password_confirmation, :email) }
  end

end
Run Code Online (Sandbox Code Playgroud)

我检查了数据库表,并且确实有usernameand password(即encrypted_pa​​ssword)。我的身份验证密钥设置为username

不知道我在这里想念的是什么。我有devise 3.0.0

Joh*_*ohn 4

在您的应用程序控制器中,您允许使用sign_up 参数,但不允许使用sign_in 参数。所以我将configure_permitted_parameters方法更改为此,它应该可以工作:

def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :password, :remember_me) }
    devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:username, :first_name, :last_name, :password, :password_confirmation, :email) }
  end
Run Code Online (Sandbox Code Playgroud)