Ruby on rails Rails:已创建用户模型并已注册,但在拉入新目录后无法登录

Ruby on rails Rails:已创建用户模型并已注册,但在拉入新目录后无法登录,ruby-on-rails,Ruby On Rails,大家好,我的第一个问题是,我正在研究博客功能,我使用has\u secure\u密码为自己创建了一个登录名。这涉及一个用户模型和一个会话模型。我将其设置为只有在登录时才可以使用某些链接/发布操作 我的问题是,当我将项目从git存储库拉到一个新目录中只是为了测试它时,当我登录时什么都没有发生,它只是再次加载表单,我的操作不可用。它只是不知道那里有一个用户。我不确定这是否是某种安全功能,但我希望在本地设置,然后在最终推送到heroku时使用登录 下面是一些代码(来自) 这是我的用户控制器(删除了一些

大家好,我的第一个问题是,我正在研究博客功能,我使用has\u secure\u密码为自己创建了一个登录名。这涉及一个用户模型和一个会话模型。我将其设置为只有在登录时才可以使用某些链接/发布操作

我的问题是,当我将项目从git存储库拉到一个新目录中只是为了测试它时,当我登录时什么都没有发生,它只是再次加载表单,我的操作不可用。它只是不知道那里有一个用户。我不确定这是否是某种安全功能,但我希望在本地设置,然后在最终推送到heroku时使用登录

下面是一些代码(来自) 这是我的用户控制器(删除了一些防止创建帐户的方法)

class UsersController
这是我的会话控制器:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      session[:user_id] = user.id
      flash[:success] = "Successfully Logged in"
      redirect_to users_path
    else
      flash.now[:warning] = "Invalid email or password"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    flash[:info] = "Logged out!"
    redirect_to root_url
  end
end
class sessioncontroller
这是会话新视图:

<h2>Sign in</h2>
<div class="row">
  <div>
  <%= form_for(:session, url: sessions_path, html: { class: "form-horizontal" }) do |f| %>

    <div class="form-group">
      <%= f.label :email, class: "col-sm-2 control-label" %>
      <div class="col-sm-6"><%= f.text_field :email %></div>
    </div>
    <div class="form-group">
      <%= f.label :password, class: "col-sm-2 control-label" %>
      <div class="col-sm-6"><%= f.password_field :password %></div>
    </div>
    <div class="form-group">
      <div class="col-sm-offset-2 col-sm-6"><%= f.submit "Sign In", class: "btn btn-large btn-primary" %></div>
    </div>
  <% end %>
  </div>
</div>
<div class="row">

</div>
登录
用户模型:

class User < ActiveRecord::Base
  before_save { self.email = email.downcase }

  validates :name, presence: true

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true,
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }

  validates :password, length: { minimum: 6 }

  has_secure_password
end
class用户

我感谢你的帮助

您遇到的问题很可能是在您的视图中使用了形式为的:session。我的猜测是,由于会话中不存在电子邮件和密码,所以它们不会出现在您的参数中。就我个人而言,我会为表单_创建一个新的用户实例,因为这就是正在登录的用户,可能并不意味着要对表单做太多更改

<h2>Sign in</h2>
<div class="row">
  <div>
  <%= form_for(User.new, url: sessions_path, html: { class: "form-horizontal" }) do |f| %>

    <div class="form-group">
      ...
    </div>
  <% end %>
  </div>
</div>

你所说的“当我把项目拉到一个新目录只是为了测试它”是什么意思。您的日志要点也会有所帮助,我的意思是,当我从git存储库中提取时。今天下午我必须抓取这些信息并与大家分享。你有任何地方可以显示flash消息吗?@Baloo我以为我在application.html.erb中有它,所以我必须修复它。你的用户模型是什么样子的?另外,在创建方法开始时,在控制器中尝试执行puts params.to_yaml,以查看此时参数中的内容?我的猜测是它是空的…谢谢你,它让我在我需要的地方。
<h2>Sign in</h2>
<div class="row">
  <div>
  <%= form_for(User.new, url: sessions_path, html: { class: "form-horizontal" }) do |f| %>

    <div class="form-group">
      ...
    </div>
  <% end %>
  </div>
</div>
class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by(email: params[:user][:email].downcase)
    if user && user.authenticate(params[:user][:password])
      session[:user_id] = user.id
      flash[:success] = "Successfully Logged in"
      redirect_to users_path
    else
      flash.now[:warning] = "Invalid email or password"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    flash[:info] = "Logged out!"
    redirect_to root_url
  end
end
<h2>Sign in</h2>
<div class="row">
  <div>
  <%= form_tag(sessions_path, html: { class: "form-horizontal" }) do %>

    <div class="form-group">
      <div class="col-sm-6"><%= text_field_tag "email" %></div>
    </div>
    <div class="form-group">
      <div class="col-sm-6"><%= text_field_tag "password" %></div>
    </div>
    <div class="form-group">
      <div class="col-sm-offset-2 col-sm-6"><%= submit_tag "Sign In", class: "btn btn-large btn-primary" %></div>
    </div>
  <% end %>
  </div>
</div>
class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by(email: params[:email].downcase)
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      flash[:success] = "Successfully Logged in"
      redirect_to users_path
    else
      flash.now[:warning] = "Invalid email or password"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    flash[:info] = "Logged out!"
    redirect_to root_url
  end
end
def new
  session[:email] = ""
  session[:password] = ""
end