Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用户会话未维护_Ruby On Rails_Ruby_Session Cookies - Fatal编程技术网

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