好的,我创建了一个用户和一个登录表单,并添加了一个会话支持。它正确显示登录表单。我登录并显示消息"已登录!"。在这里工作正常。
但它仍然向我显示登录字段。我添加了一个" 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
答案 0 :(得分:2)
session
和destroy
方法中的 create
看起来不对。将其从session[:userid]
更改为session[:user_id]
在destroy
:
session[:user_id] = nil
在create
:
session[:user_id] = user.id