Rails user_authentication不起作用,find方法总是返回nil

时间:2015-09-16 08:41:46

标签: ruby-on-rails ruby

我似乎无法理解这一点,我已经尝试了几个小时但它似乎仍然无法工作,即使我已经按照教程进行操作适当的。我基本上用自己的会话控制器创建自己的登录验证。它有一个登录表单,然后是一些身份验证步骤。我也使用bcrypt为密码创建哈希,我不知道这是否正在做任何事情,我怀疑它不是,但仍然存在。

以下是我使用的表单:

    - provide(:title, "Sign in")
%h1 Log in
.row
  .col-md-6.col-md-offset-3
    = form_for signin_path do |f|
      = f.text_field :email, placeholder: 'Email'
      = f.password_field :password, placeholder: 'Password', required: true
      = f.submit "Sign in"
    %p
      New user? #{link_to "Create New Account", new_user_path}

这是我的会议控制员:

 class SessionsController < ApplicationController
  require 'bcrypt'

  def new 
  end 

  def create
    #google_user = GoogleUser.from_omniauth(env["omniauth.auth"])
    #session[:google_user_id] = google_user.id
    #redirect_to '/users'
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to user, notice: 'Logged In'
    else 
      render :new
    end
  end

  def destroy
    #session[:google_user_id] = nil
    session[:user_id] = nil
    redirect_to root_path, notice: 'Logged Out'
  end
end

忽略谷歌的东西,这是我以后必须处理的事情,就像看起来一样。

我也不允许使用任何设计或其他任何使此过程更容易的设备。如果有人可以查看我的代码并告诉我是否有错误,我会很感激,因为我当然不知道还有什么可以解决这个问题。

查询参数:

SELECT users.* FROM users WHERE users.email = 'email'

该查询的问题在于,当我输入时,它没有收到正确的电子邮件,&#34; email@gmail.com"它没有得到它,它只是抓住了符号&#39;电子邮件&#39;

3 个答案:

答案 0 :(得分:4)

我相信你的代码中有错误:

public void DragContrinueHandler(object sender, QueryContinueDragEventArgs e)
        {
            if (e.Action == DragAction.Continue && e.KeyStates != DragDropKeyStates.LeftMouseButton)
            {
                _dragdropWindow.Close();
            }
        }

应该是:

user = User.find_by_email(params[:password])

答案 1 :(得分:0)

我认为你必须改变:

user = User.find_by_email(params[:password])

user = User.find_by_email(params[:email])

答案 2 :(得分:0)

变化

user = User.find_by_email(params[:password])

user = User.where(email: params[:email]).take