1

私のデータベースのRailsには、me@gmail.comというユーザーがいますが、ME@gmail.comでログインしようとすると. 私はできません。ログインしようとする前に、明らかに私のフィールドは小文字になりません。私は私がしなければならないことを知っています...

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

しかし、私が理解していることから、それはモデルに当てはまります。しかし、私はセッションコントローラーしか持っていません。セッションモデルではありません。では、どうすれば同じ効果を得ることができますか?

現在のユーザー モデル

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) }

私の現在のセッションコントローラー

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"}
4

1 に答える 1

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

また

このようなメソッドauthenticatesmthで:

User.where("LOWER(email) = LOWER(?)", email).first
于 2013-05-20T17:29:52.190 に答える