用户登录身份验证在Ruby on Rails中不起作用

时间:2016-01-19 16:57:04

标签: 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
      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

0 个答案:

没有答案