rails中的会话和user_id

时间:2015-02-21 23:32:15

标签: ruby-on-rails session userid

我在使用Rails理解会话和身份验证方面遇到了很多麻烦。基本上,我尝试根据一本书的教程设置基于user_id的会话。这是我的sessions_controller.rb文件中的create方法:

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引用会话:

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

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

为了澄清,我已经从rails控制台列出了用户对象和配方对象的参数:

    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)

1 个答案:

答案 0 :(得分:2)

在你的create方法中它应该是

session[:user_id] = user.id

您正在会话哈希中设置密钥:user_id,并在其中存储经过身份验证的用户ID user.id以供日后使用

键名可以是任何