rails 中的会话和 user_id
Sessions and user_id in rails
我在理解 Rails 的会话和身份验证时遇到很多问题。所以基本上,我尝试根据书中的教程设置基于 user_id 的会话。这是我的 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:
引用会话
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)
在你的创建方法中它应该是
session[:user_id] = user.id
您正在会话哈希中设置密钥 :user_id
并将经过身份验证的用户的 ID user.id
存储在其中供以后使用
键名可以是任何东西
我在理解 Rails 的会话和身份验证时遇到很多问题。所以基本上,我尝试根据书中的教程设置基于 user_id 的会话。这是我的 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:
引用会话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)
在你的创建方法中它应该是
session[:user_id] = user.id
您正在会话哈希中设置密钥 :user_id
并将经过身份验证的用户的 ID user.id
存储在其中供以后使用
键名可以是任何东西