【发布时间】: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_parameters,如果::devise_controller?如有必要,您可以生成设计控制器并覆盖允许的参数。
-
我正在学习一个教程,这就是我在那里学习的内容
-
如果您正在学习,我建议您使用本教程github.com/plataformatec/devise 它记录了所有内容和细节。
标签: ruby-on-rails ruby devise