2013-10-31 5 views
0

사용자가 로그인하지 않았 으면 로그인 양식을 표시하는 if 문이 있습니다. 나는 루비와 레일에 익숙하지 않기 때문에이 문제를 올바르게 해결하는 방법을 모른다.rails 4.0 현재 사용자의 if 문이 올바르게 작동하지 않습니다.

현재 양식으로 로그인하면 플래시 메시지가 표시되지만 로그인 양식은 그대로 유지됩니다. 새 사용자를 만들면 자동으로 생성되고 로그 아웃 버튼이 로그 형태로 표시됩니다. 로그 아웃을 선택하면 로그 아웃되고 홈 페이지로 돌아가며 로그 아웃되지만 로그 아웃됩니다. 로그 아웃 버튼 형태

application.html.erb

<!DOCTYPE html> 
<html> 
<head> 
    <link rel="stylesheet" href="/css/style.css"> 

</head> 
<body> 
    <header> 
     <div class="wrapper"> 
      <img src="/gfx/logo.png"> 
      <span>Twitter Clone</span> 

      <% if current_user %> 
       <%= link_to "Log Out", sessions_destroy_path %> 
      <% else %> 
       <%= form_tag sessions_create_path do %> 
        <%= text_field_tag :username, nil, placeholder: "username" %> 
        <%= password_field_tag :password, nil, placeholder: "password" %> 
        <%= submit_tag "Log In" %> 
       <% end %> 
      <% end %> 

     </div> 
    </header> 
    <div id="content"> 
     <div class="wrapper"> 
      <% flash.each do |name, msg| %> 
       <%= content_tag :div, msg, class: "flash #{name}" %> 
      <% end %> 
      <%= yield %> 
     </div> 
    </div> 
    <footer> 

     <div class="wrapper"> 
      Ribbit - A Twitter Clone in Ruby<img src="/gfx/logo-nettuts.png"> 
     </div> 
    </footer> 
</body> 
</html> 

application_controller.rb

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    private 

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

helper_method :current_user 
end 

sessions_controller.rb

0 로그 다시 대신 대체 남아 # 만들고 세션에 있지만 세션과 함께 CURRENT_USER에서 확인된다 : [사용자 ID]
class SessionsController < ApplicationController 
    def new 
    end 

    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 
+2

가 실수로'실수 세션 [되지 실수되지 않은 : 사용자 ID를 session = [user_id] = nil' –

+2

'SessionsController # destroy'에서 세션 대신 작은 오타 세션 [: userid]이 있습니다 [ : user_id]. 이 때문에, 당신은 실제로 로그 아웃하지 않습니다 – eugen

+0

내 문제를 해결해 주셔서 감사합니다 – Ir1sh

답변

0

이 실수로 session[:userid] = user.idsession[:user_id] = user.idsession[:user_id] = nil

1

그런데 한 가지 당신이 세션 설정하는된다 : USER_ID]

세션 [: 사용자 ID]를하지 세션 [같습니다 : USER_ID]

관련 문제