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