Ruby on rails 用户登录身份验证在RubyonRails中不起作用
我正在尝试通过登录页面将用户登录到我的rails站点。“我的用户”输入他们的电子邮件和密码以便登录,但当他们单击“提交”按钮时,页面会自动刷新-但它应该会将用户带到他们的仪表板(用户配置文件屏幕) 我似乎不知道为什么。虽然我从数据库中得到的信息如下:Ruby on rails 用户登录身份验证在RubyonRails中不起作用,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在尝试通过登录页面将用户登录到我的rails站点。“我的用户”输入他们的电子邮件和密码以便登录,但当他们单击“提交”按钮时,页面会自动刷新-但它应该会将用户带到他们的仪表板(用户配置文件屏幕) 我似乎不知道为什么。虽然我从数据库中得到的信息如下: Started POST "/login" for 96.49.105.234 at 2016-01-19 16:50:41 +0000 Processing by SessionsController#create as HTML
Started POST "/login" for 96.49.105.234 at 2016-01-19 16:50:41 +0000
Processing by SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"zo/bLDBFtOAthi/vD8nU5Iqdn3TcsdB/NS8SJKW/l190YC7uXMLw6+EFWl6FPf3hDmVTTN2ozZ4t/8lanYZHhg==", "session"=>{"email"=>"myuser@live.ca", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? LIMIT 1 [["email", "myuser@live.ca"]]
Rendered sessions/new.html.erb within layouts/application (1.5ms)
Completed 200 OK in 153ms (Views: 71.4ms | ActiveRecord: 0.4ms)
见下面的代码:
会话\u controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email] .downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user
else
render 'new'
end
end
def destroy
end
end
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
#Returns the current logged-in user
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
end
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %> </p>
</div>
</div>
class User < ActiveRecord::Base
has_secure_password
validates_length_of :password, :in => 6..20, :on => :create
validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }
end
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation)
end
def show
@user = User.find(params[:id])
end
def new
end
end
new.html.erb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email] .downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user
else
render 'new'
end
end
def destroy
end
end
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
#Returns the current logged-in user
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
end
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %> </p>
</div>
</div>
class User < ActiveRecord::Base
has_secure_password
validates_length_of :password, :in => 6..20, :on => :create
validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }
end
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation)
end
def show
@user = User.find(params[:id])
end
def new
end
end
新用户
user.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email] .downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user
else
render 'new'
end
end
def destroy
end
end
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
#Returns the current logged-in user
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
end
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %> </p>
</div>
</div>
class User < ActiveRecord::Base
has_secure_password
validates_length_of :password, :in => 6..20, :on => :create
validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }
end
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation)
end
def show
@user = User.find(params[:id])
end
def new
end
end
class用户6..20,:on=>:create
验证:密码确认,状态:true,如果:->{new_record?| | changes[“password”]}
结束
用户\u控制器.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email] .downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user
else
render 'new'
end
end
def destroy
end
end
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
#Returns the current logged-in user
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
end
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %> </p>
</div>
</div>
class User < ActiveRecord::Base
has_secure_password
validates_length_of :password, :in => 6..20, :on => :create
validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }
end
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You signed up successfully"
flash[:color] = "valid"
redirect_to @user
else
flash[:notice] = "Form is invalid"
flash[:color] = "invalid"
render "new"
end
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation)
end
def show
@user = User.find(params[:id])
end
def new
end
end
class UsersController
user.authenticate方法的作用是什么?似乎条件块在User.authenticate
条件下失败。我认为正确的身份验证是问题所在。你能在你的用户模型中通过吗?@Cyzanfar看到上面粘贴的User.rb:)你的实例方法authenticate
在你的用户模型中声明在哪里?@Cyzanfar啊,也许这就是我缺少的。我觉得我的user.rb文件就是这么做的。刚刚在上面粘贴了我的用户_controller.rb。PS-为我的新问题道歉;我还在试着绕着栏杆转!