繁体   English   中英

Ruby on Rails设计

[英]Ruby on rails devise

我正在学习如何使用devise gem,但遇到了一些问题,我试图使用'login'参数进行登录。 但是我的应用程序不会更新用户登录信息。 不能通过表单,甚至不能通过控制台。

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

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

2.2.1:036> u.login =>“ stormviper” 2.2.1:037> u.save!

(0.1毫秒)开始事务用户存在(0.2毫秒)从“用户”位置选择一个1(LOWER(“ users”。“ login”)= LOWER('stormviper')AND“ users”。“ id”!= 4 )LIMIT 1(0.1ms)commit transaction => true

然后运行此命令后,它甚至不更新用户的登录名,我对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

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

如果您想添加“登录”参数,则可以简单地覆盖devise注册控制器并定义它

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM