Ruby on rails 用户会话未维护
用户可以很好地登录,但是一旦切换到另一个页面,会话就结束了。正如您在中看到的,导航栏会发生变化,就好像用户已注销,而当前的_用户不再处于活动状态。在主页上,名字应该显示在欢迎之后,但不是 知道为什么会这样吗?干杯 会话控制器Ruby on rails 用户会话未维护,ruby-on-rails,ruby,session-cookies,Ruby On Rails,Ruby,Session Cookies,用户可以很好地登录,但是一旦切换到另一个页面,会话就结束了。正如您在中看到的,导航栏会发生变化,就好像用户已注销,而当前的_用户不再处于活动状态。在主页上,名字应该显示在欢迎之后,但不是 知道为什么会这样吗?干杯 会话控制器 class LoginsessionsController < ApplicationController def new end def show end def create @user = User.find_by(email: params[:login
class LoginsessionsController < ApplicationController
def new
end
def show
end
def create
@user = User.find_by(email: params[:loginsessions][:email].downcase)
if @user && @user.authenticate(params[:loginsessions][:password])
session[:user_id] = @user.id
sign_in(@user)
redirect_to @user
else
flash[:notice] = "Invalid email or password"
render 'new'
end
end
def destroy
signout
session[:user_id] = nil
respond_to do |format|
format.html { redirect_to "http://localhost:3000/" , notice: 'You have
successfully signout!.'}
end
end
end
用户控制器
class UsersController < ApplicationController
def index
@user = User.new
end
def show
@user = User.find(params[:id])
#unless session[:user_id] == @user.id
# redirect_to "http://localhost:3000/loginsessions/new"
#flash[:notice] = "You do not have access and have been logged out"
#end
end
def new
@user = User.new
end
def create
@user = User.new(users_params)
if @user.save
sign_in @user
redirect_to @user
else
render 'new'
end
end
def destroy
signout
session[:user_id] = nil
respond_to do |format|
format.html { redirect_to "http://localhost:3000/loginsessions/new" ,
notice: 'You have successfully signout!.'}
end
end
private
def users_params
params.require(:user).permit(:firstName, :lastName, :email, :password,
:remember_token)
end
end
class UsersController
Application.html相关代码
<% if current_user.present? %>
<li><%= link_to "Sign out", signout, method: "delete" %></li>
<li class="trail"><a href="/users/new">Settings</a></li>
<% else %>
<li><a href="/loginsessions/new">Login</a></li>
<li class="trail"><a href="/users/new">Signup</a></li>
<% end %>
索引(主页)
欢迎您
我想我找到了问题所在。在LoginsessionsHelper#sign_In
中,未定义变量@user
。当前用户=
方法也存在同样的问题。我认为应该改变如下:
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
session[:user_id] = user.id
end
def current_user=(user)
@current_user = user
end
我想我发现了问题所在。在
LoginsessionsHelper#sign_In
中,未定义变量@user
。当前用户=
方法也存在同样的问题。我认为应该改变如下:
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
session[:user_id] = user.id
end
def current_user=(user)
@current_user = user
end
它看起来不像是你在你的
会话中正确地持久化记住\u令牌
,所以它可能会被抛出。它看起来不像是你在你的会话中正确地持久化记住\u令牌
,所以它可能会被抛出。啊,好的!当用户访问userscoontroller
时,通过检查cookie的身份验证,您在哪里设置current\u user
?通常在ApplicationController
中完成此操作。让我更新我的答案。对不起,我现在看到了。您可以将def当前用户
和def已登录?
移动到ApplicationController
。然后,为了帮助调试,当后续请求调用当前用户
方法时,您能否打印出会话[:user\u id]
?感谢您的回复,我将它们移到了另一个位置,但仍然存在相同的问题。在我从用户页面切换到主页后查看控制台,这就是结果。当用户登录到他们的页面时,不会出现IS NULL。您是否有config/initializers/session\u store.rb
文件?我的内存中有类似的东西:Rails.application.config.session\u存储:cookie\u存储,键:''myapp\u session'
是的,我有,它只包含Rails.application.config.session\u存储:cookie\u存储,键:'\u LibrarySystem\u session'
啊,好的!当用户访问userscoontroller
时,通过检查cookie的身份验证,您在哪里设置current\u user
?通常在ApplicationController
中完成此操作。让我更新我的答案。对不起,我现在看到了。您可以将def当前用户
和def已登录?
移动到ApplicationController
。然后,为了帮助调试,当后续请求调用当前用户
方法时,您能否打印出会话[:user\u id]
?感谢您的回复,我将它们移到了另一个位置,但仍然存在相同的问题。在我从用户页面切换到主页后查看控制台,这就是结果。当用户登录到他们的页面时,不会出现IS NULL。您是否有config/initializers/session\u store.rb
文件?我的有类似的东西:Rails.application.config.session\u store:cookie\u store,key:''myapp\u session'
是的,我有,它只包含Rails.application.config.session\u store:cookie\u store,key:'\u LibrarySystem\u session'
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
session[:user_id] = user.id
end
def current_user=(user)
@current_user = user
end