사용자가 로그인하지 않았 으면 로그인 양식을 표시하는 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
가 실수로'실수 세션 [되지 실수되지 않은 : 사용자 ID를 session = [user_id] = nil' –
'SessionsController # destroy'에서 세션 대신 작은 오타 세션 [: userid]이 있습니다 [ : user_id]. 이 때문에, 당신은 실제로 로그 아웃하지 않습니다 – eugen
내 문제를 해결해 주셔서 감사합니다 – Ir1sh