ruby-on-rails - 用于登录的 Rails 小写字段输入

标签 ruby-on-rails ruby ruby-on-rails-3 input authentication

在我数据库的 rails 中,我有一个名为 me@gmail.com 的用户,但如果我尝试使用 ME@gmail.com 登录。我不能。很明显,我的字段在尝试登录之前不会变成小写。我知道我应该做一个...

before_save { |用户| user.email = email.downcase }

但据我了解,模型中包含了这一点。但我只有一个 session Controller 。不是 session 模型。那么我该如何达到同样的效果呢?

我当前的用户模型

class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation, :name

  attr_accessor :password
  before_save :encrypt_password
  before_save { |user| user.email = email.downcase }
  before_save { |user| user.name = name.downcase }
  before_create { generate_token(:auth_token) }
  before_create { generate_token(:email_token) }

我当前的 session Controller

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.authenticate(params[:email], params[:password])
      if user
        if user.email_activation_token == true
          if params[:remember_me]
            cookies.permanent[:auth_token] = user.auth_token
          else
            cookies[:auth_token] = user.auth_token
          end
          redirect_to root_url, :notice => "Logged in!"
        else
          flash.now.alert = "You email has not yet been verified. Please click the link in your email." 
          render "new"
        end
      else
        flash.now.alert = "Invalid email or password"
        render "new"
      end
  end

有问题的表单域

= form_tag sessions_path do
  %p
    = label_tag :email
    = text_field_tag :email, params[:email]
  %p
    = label_tag :password
    = password_field_tag :password
  %p.button
    %input{name: "commit", type: "submit", value: "Log in"}

最佳答案

user = User.authenticate(params[:email].downcase, params[:password])

在方法authenticate smth 中是这样的:

User.where("LOWER(email) = LOWER(?)", email).first

关于ruby-on-rails - 用于登录的 Rails 小写字段输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16654766/

相关文章:

ruby-on-rails - Rails 试图访问模型中的参数

ruby-on-rails - 验证失败时重新加载回形针文件上传

javascript - Turbolinks 不起作用(页面加载两次)

javascript - 将柯里化(Currying)函数从 Rails 传递到 JavaScript

ruby-on-rails - 在主网络进程中运行delayed_job

ruby - 在不添加 "end"的情况下编写 Ruby 的任何方法?

ruby-on-rails - 在安装了bundler -v 2.0.2的Docker上运行的Rails 6…必须将此 bundle 文件使用Bundler 2或更高版本

ruby - 如何向url添加额外的参数? - 编码网址

ruby-on-rails - Windows 上的 Rails - 安装问题

ruby-on-rails - 在 ruby​​/rails 中将 1200 转换为 1.2K