5

我刚开始使用 Rails 4。我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

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

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

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

我检查了数据库表,我确实有usernamepassword(即encrypted_pa​​ssword)。我将身份验证密钥设置为username.

不知道我在这里缺少什么。我有devise 3.0.0

4

2 回答 2

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
于 2013-11-18T08:06:06.100 回答
0

我正在使用可确认的设计。devise.rb 的设置方式是,如果帐户的电子邮件未得到确认,它不会让我登录。所以在我的情况下有效的是在 devise.rb config.allow_unconfirmed_access_for = 999.days 添加以下标志

默认值为 nil,这意味着在用户确认他们的电子邮件之前,设计不会让您登录

在我的 UI 中,我显示了一个错误消息栏,其中包含一个触发重新发送确认邮件的按钮。错误栏一直存在,直到用户确认他们的邮件。

于 2022-02-05T05:26:55.903 回答