【问题标题】:Ruby on rails deviseRuby on rails 设计
【发布时间】:2016-06-17 00:47:15
【问题描述】:

我正在学习如何使用设计 gem,但遇到了一些问题,我正在尝试使用“登录”参数登录。但是我的应用程序不会更新用户登录。不通过表单,甚至不通过控制台。

在控制台中它只是选择登录,实际上并没有更新它:

current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2016-03-03 15:31:55”,updated_at:“2016-03-03 15:34:21”,提供者:无,uid:无, 登录:无>

2.2.1 :036 > u.login => "stormviper" 2.2.1 :037 > 保存!

(0.1ms) 开始事务用户存在 (0.2ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."login") = LOWER('stormviper') AND "users"."id" != 4) LIMIT 1 (0.1ms) 提交 交易 => 真实

然后在运行之后,它甚至没有更新用户的登录信息,我对 application_controller 进行了一些更改,我认为问题完全错误,但我不知道:

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
  before_action :authenticate_user!, if: :devise_controller?
  before_filter :configure_permitted_parameters, if: :devise_controller?

protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:login, :email, :password, :password_confirmation, :remember_me) }
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :password, :remember_me) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:login, :email, :password, :password_confirmation, :current_password) }
  end
end

我还对 user.rb 做了一些改动:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  attr_accessor :login
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :authentication_keys => [:login]
  validates :login,
  :presence => true,
  :uniqueness => {
    :case_sensitive => false
  }



  def self.find_for_database_authentication(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      where(conditions.to_h).where(["lower(login) = :value OR lower(login) = :value", { :value => login.downcase }]).first
    elsif conditions.has_key?(:login) || conditions.has_key?(:login)
      where(conditions.to_h).first
    end
  end

我将如何解决这个问题?谢谢

【问题讨论】:

  • 快速提问,你为什么要使用这个 before_filter :configure_permitted_pa​​rameters,如果::devise_controller?如有必要,您可以生成设计控制器并覆盖允许的参数。
  • 我正在学习一个教程,这就是我在那里学习的内容
  • 如果您正在学习,我建议您使用本教程github.com/plataformatec/devise 它记录了所有内容和细节。

标签: ruby-on-rails ruby devise


【解决方案1】:

如果你想添加“登录”参数,你可以简单地覆盖设计注册控制器并定义这个

def configure_sign_up_params
   params.require(:user).permit( :email, :password, :password_confirmation, :login )
end

【讨论】:

  • 我刚刚尝试过,但仍然失败,由于某种原因,它没有更新登录字段,而是选择了它。即使在控制台中,我也无法强制填写登录字段,它始终保持为零
  • 我刚刚覆盖了控制器,但仍然没有影响 - 我什至硬编码了 "@user.login = "AUSERNAME" " 行,但仍然没有效果。
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 2011-12-25
  • 2014-01-25
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多