加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Devise with Rails 4登录用户名

发布时间:2020-12-17 03:16:36 所属栏目:百科 来源:网络整理
导读:我正在使用Rails 4.0和Devise 3.0.0.rc. 我安装了Devise的默认设置 – 即使用您的电子邮件地址注册/使用.但是,我希望用户能够使用用户名而不是他们的电子邮件地址进行注册.我根据要更改的参数来跟踪railscast,以及我可以在这里找到的任何建议,我可能需要为Ra
我正在使用Rails 4.0和Devise 3.0.0.rc.

我安装了Devise的默认设置 – 即使用您的电子邮件地址注册/使用.但是,我希望用户能够使用用户名而不是他们的电子邮件地址进行注册.我根据要更改的参数来跟踪railscast,以及我可以在这里找到的任何建议,我可能需要为Rails 4更改.但是,每当我尝试创建新用户时,我都会收到错误’电子邮件不能为空白’.有没有人知道造成这种情况的原因,以及我如何解决这个问题?谢谢!!

码:

应用控制器:

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_filter :configure_permitted_parameters,if: :devise_controller?

  protected

   def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username,:password,:password_confirmation) }
      devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username,:remember_me) }
    end
end

登录(注册表单几乎相同):

<%= form_for(resource,:as => resource_name,:url => session_path(resource_name)) do |f| %>
  <div><%= f.label :username %><br />
  <%= f.text_field :username,:autofocus => true %></div>

在devise.rb配置中:

config.authentication_keys = [ :username ]

用户控制器:

private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

# Never trust parameters from the scary internet,only allow the white list through.
def user_params
  params.require(:user).permit(:first_name,:middle_names,:last_name,:date_of_birth,:gender,:line_1,:line_2,:line_3,:town,:county,:postcode,:contact_number,:email,:username,:password_confirmation,:remember_me)
end

user.rb:

protected

  def self.find_for_database_authentication(warden_conditions)
    conditions = warden_conditions.dup
    login = conditions.delete(:login)
    where(conditions).where(["lower(username) = :value",{ :value => login.downcase }]).first
  end

解决方法

从User model devise部分中删除validatable – 此选项验证电子邮件地址的存在,唯一性和格式.但是,您必须手动添加自己的密码存在,确认和长度验证.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读