【问题标题】:Conditional 'attr_accessible' using ActiveResource in Ruby on Rails在 Ruby on Rails 中使用 ActiveResource 的条件“attr_accessible”
【发布时间】:2011-01-11 02:18:10
【问题描述】:

我有两个 RoR3 应用程序:

  • http://users.domain.local
  • http://profiles.domain.local

我创建了“用户/模型/profile.rb”:

class Profile < ActiveResource::Base
  self.site = "http://profiles.domain.local"
end

在 'profiles/models/profile.rb' 我有:

attr_accessible :name

我的个人资料的 SQL 表包含以下列:

  • 身份证
  • 姓名
  • user_id

因此,如果我运行Profile.create(:name =&gt; "test_name"),则会在http://profiles.domain.local 中创建一个名为“test_name”的新配置文件。

出于明显的安全原因,我不想让“user_id”属性可访问,但我需要在配置文件创建时设置它从“用户”应用程序

我尝试了很多方法来做到这一点,但我找不到一个简单的解决方案。也许,可以在“profile”应用程序的“attr_accessible”附近使用if 语句来填充来自“user”应用程序的请求。

有人可以帮帮我吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 activeresource attr-accessible


    【解决方案1】:

    您可以尝试类似 Amazon Web Services 的做法:对每个请求使用一个非常长的、随机生成的密钥。检查您的个人资料应用中的密钥是否正确,如果正确,请更新属性。

    【讨论】:

    • 您确定亚马逊使用这种方法吗?我听起来有点“黑客”......无论如何,我必须首先传达“配置文件”应用程序的密钥,然后比较它们。全部通过 'NET:HTTP' GET 请求?方法对吗?
    • 亚马逊、谷歌等这样做的方式是:他们给你一个 API 密钥,它本质上是一长串随机字符。它的使用方式就像一个密码:profiles 应用程序将其发送给users 应用程序(在每个请求中,或者在每个会话开始时)。在profiles 上,API 密钥通常会被硬编码或在配置文件中。然后Users 将检查 API 密钥是否有效,与您的帐户匹配,并被授权执行您请求的操作。如果您通过不受信任的网络发送敏感信息,请不要忘记使用 SSL。
    • 在这种情况下我不需要 SSL,但对于其他我需要它。但是我有很多问题,大部分都使用 ActiveResource 类(我的问题之一:stackoverflow.com/questions/4653006/…
    【解决方案2】:

    解决方案:不要简单地使用Profile.create,而是使用关联构建器。保护user_id 属性并使用user.profiles.create!(params[:profile]) 使其自动将配置文件的user_id 字段设置为user 对象。

    【讨论】:

    • 使用 'Profile.create!(:user_id => '34')' 我得到一个“未定义的方法 `create!'对于配置文件:类”错误。 'Profile.create(:user_id => '34')' 有效,但与 ':user_id' 无关!
    • 也许我对关联构建器有误...你能根据我提供的数据给我一个例子吗?
    • 我的错,Profile 似乎不像我想象的那样是一个 ActiveRecord 类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多