RoR - 会话无法正常工作(登录/注销)

时间:2015-04-21 14:43:14

标签: ruby-on-rails ruby session

好的,我创建了一个用户和一个登录表单,并添加了一个会话支持。它正确显示登录表单。我登录并显示消息"已登录!"。在这里工作正常。

但它仍然向我显示登录字段。我添加了一个" Logout"链接那里,如果用户登录,显示注销。但它为我提供了登录成功的消息以及登录表单。

这是application.html.erb文件

<header>
    <div class="wrapper">
        <img src="/gfx/logo.png">
        <span>Welcome</span>
        <% if current_user %>
            <%= link_to "Log Out", logout_path %>
        <% else %>
            <%= form_tag sessions_path do %>
                <%= text_field_tag :username, nil, placeholder: "username" %>
                <%= password_field_tag :password, nil,  placeholder: "password" %>
                <%= submit_tag "Log In" %>
            <% end %>
        <% end %>
    </div>
</header>

会话控制器:

class SessionsController < ApplicationController

  def create
    user = User.find_by_username(params[:username])
    if user && user.authenticate(params[:password])
        session[:userid] = user.id
        redirect_to root_url, notice: "Logged in!"
    else
        flash[:error] = "Wrong Username or Password."
        redirect_to root_url
    end
  end

  def destroy
    session[:userid] = nil
    redirect_to root_url, notice: "Logged out."
  end

end

应用程序控制器:

private

def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

helper_method :current_user

用户控制器(创建)操作:

def create
  @user = User.create(user_params)

  if @user.save
    session[:user_id] = @user.id
    redirect_to @user, notice: "Thank you for signing up!"
  else
    render 'new'
  end
end

1 个答案:

答案 0 :(得分:2)

sessiondestroy方法中的

create看起来不对。将其从session[:userid]更改为session[:user_id]

destroy

session[:user_id] = nil

create

session[:user_id] = user.id