我试图通过登录页面将用户登录到我的rails网站。我的用户输入他们的电子邮件和密码以便登录,但是当他们点击提交按钮时,页面只会刷新自己 - 但它应该将用户带到他们的仪表板(用户配置文件屏幕)。
我似乎无法确定原因。虽然这是我从数据库中得到的东西:
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)
见下面的代码:
sessions_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
sessions_helper.rb
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
new.html.erb
<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>
user.rb
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
users_controller.rb
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