我正在使用Devise进行身份验证。我有两个模型,其中用户有一个配置文件和配置文件属于用户:
git config --global http.postBuffer 524288000
我正在使用嵌套资源,例如
class User < ActiveRecord::Base
has_one :profile, dependent: :destroy
end
class Profile < ActiveRecord::Base
belongs_to :user
end
要创建新的用户个人资料,我使用路由到resources :users do
resource :profile
end
等的前缀new_user_profile_path(current_user)
要更新用户个人资料,请执行以下操作
prifile#new
这感觉不对,因为我没有在个人资料# e.g. users/123/profile
current_user.profile.update(profile_params)
中使用the user_id => 123
。
我应该通过user_id找到用户个人资料,例如
params
此外,用户无法编辑其他用户的个人资料。
感谢您的反馈。
答案 0 :(得分:1)
current_user.profile.update(profile_params)
是更新当前用户的配置文件的可接受方式。
这也有助于保护配置文件不被其他用户编辑。如果您将用户ID基于从查询字符串传入的参数,那么这是不安全的,并且允许任何登录用户能够更新其他用户配置文件。
例如,使用具有访问权限的任何人都可以使用restful路径发布到/users/profiles/:id
,即使它不是他们自己的ID。
current_user
是User模型的一个实例,已包含user_id
属性。