ruby-on-rails - rails 中的 session 和 user_id

标签 ruby-on-rails session userid

我在理解 Rails 的 session 和身份验证方面遇到了很多困难。所以基本上,我尝试根据书中的教程设置基于 user_id 的 session 。这是我的 sessions_controller.rb 文件中的创建方法:

def create
if user = User.authenticate(params[:email], params[:password])
  session[:id] = user.id
  redirect_to root_path, :notice => 'Logged in successfully'
else
  flash.now[:alert] = "Invalid login/password combination"
  render :action => 'new'
end

结束

但是,当我尝试在我的 application_controller.rb 文件中定义一个 current_user 方法时,它要求我根据 user_id 引用 session :

def current_user
  return unless session[:user_id]
  @current_user = User.find_by_id(session[:user_id])
end

这让我感到困惑 - user_id 是每个 Recipe 的一个属性(相当于我应用程序中的文章或帖子),它与用户建立了 has_one 关系。我的应用程序中没有其他地方定义了 user_id。所以 user_id 不应该是用户的属性,对吧?

为了澄清,我列出了来自 Rails 控制台的 User 对象和 Recipe 对象的参数:

    2.0.0-p598 :019 >   Recipe 
    => Recipe(id: integer, title: string, body: text, published_at:    
    datetime, created_at: datetime, updated_at: datetime, user_id: 
    integer, photo_of_recipe_file_name: string, 
    photo_of_recipe_content_type: string, photo_of_recipe_file_size:   
    integer, photo_of_recipe_updated_at: datetime)

    2.0.0-p598 :020 > User
    => User(id: integer, email: string, hashed_password: string,     
    created_at: datetime, updated_at: datetime, username: string)

最佳答案

在你的创建方法中它应该是

session[:user_id] = user.id

您正在 session 哈希中设置一个 key :user_id 并将经过身份验证的用户的 ID user.id 存储在其中以供以后使用

键名可以是任何东西

关于ruby-on-rails - rails 中的 session 和 user_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652674/

相关文章:

ruby-on-rails - 在 Rails 中安静地执行 AJAX 删除操作

ruby-on-rails - 如何在哈希数组中搜索哈希键值

PHP:计算 session 中数组的数量

session - 为什么关闭选项卡不会删除 session Cookie?

ruby-on-rails - Rails - 用户名小写验证

ruby-on-rails - 使用正则表达式验证 URL/域? ( rails )

session - 在调度程序中运行时 Coldfusion 9 session 变量错误

javascript - 注册时获取用户id

PHP:存储登录用户

asp.net - 从 ASP.Net 登录控件 LoggedIn 事件获取 UserID