我正在使用Web客户端和iPhone客户端构建应用程序.
在Web客户端上,我通过Facebook使用Omniauth对用户进行身份验证,然后用户可以将应用上的操作发布到Facebook.这很好用.
我在从iPhone应用程序实现Auth流程时遇到一些问题.
我在rails应用程序中将Doorkeeper设置为OAuth提供程序.虽然我不确定如何实现身份验证流程.
我想出了这个:用户可以在iPhone中登录Facebook并获得令牌.然后我们的想法是将令牌以及Facebook uid发送到rails应用程序,存储它,并使用Omniauth对用户进行身份验证.一旦用户通过身份验证,就会生成一个带有Doorkeeper的令牌并将其发送回iPhone应用程序.
如果这是用户第一次针对rails应用进行身份验证,则会创建一个新用户.
然后,用户可以针对JSON-api执行操作,并且rails app将负责Facebook集成,因为Facebook令牌存储在用户记录中.
该应用程序还将跨越多个域,因此我需要注册多个Doorkeeper应用程序以提供不同的回调uri.
这似乎是一个可行的解决方案吗?它安全吗?有替代流量/方法吗?
谢谢.
如何添加vendor/assets/javascripts/mymountableengine或加载vendor/assets/stylesheets/mymountableengine可安装引擎的资产路径?我希望能够在我的可安装引擎的带有sprockets的application.js/application.css文件中要求这些文件夹中的文件.
Rails 3.2.2
谢谢.
我在为模型中包含的模块命名空间时遇到了一些麻烦.
在/app/models/car.rb中
class Car
include Search::Car
end
Run Code Online (Sandbox Code Playgroud)
在/lib/search/car.rb中
module Search
module Car
include ActiveSupport::Concern
# methods in here
end
end
Run Code Online (Sandbox Code Playgroud)
在/config/application.rb中
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.autoload_paths += Dir["#{config.root}/lib/search/*"]
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我启动服务器时,我没有直接得到任何错误.但是如果我在一段时间后刷新浏览器,我会收到此错误:
Expected #{Rails.root}/lib/search/car.rb to define Car
Run Code Online (Sandbox Code Playgroud)
问题的性质表明它与以下内容有关:
/config/environments/development.rb
config.cache_classes = false
Run Code Online (Sandbox Code Playgroud)
我也尝试将文件search.rb直接放在/lib我定义的位置Search:
module Search
# Put shared methods here
end
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
更新:
好吧,事实证明,如果我重新命名Search::Car,以Search::CarSearch它的工作原理.是否不可能在不同的范围内具有相同名称的模块/类?
可以说我有以下映射:
"site": {
"properties": {
"title": { "type": "string" },
"description": { "type": "string" },
"category": { "type": "string" },
"tags": { "type": "array" },
"point": { "type": "geo_point" }
"localities": {
type: 'nested',
properties: {
"title": { "type": "string" },
"description": { "type": "string" },
"point": { "type": "geo_point" }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我在父文档上执行"_geo_distance"排序,并能够对"site.point"上的文档进行排序.但是,我还希望嵌套的局部性在父文档中按"_geo_distance"排序.
这可能吗?如果是这样,怎么样?
您将如何在MongoDB中深入克隆文档(mongoid)
我尝试过这样的事情;
original = Car.find(old_id)
@car = original.clone
@car._id = BSON::ObjectId.new
Run Code Online (Sandbox Code Playgroud)
但是我之后遇到问题的反序列化问题.
如何使用除_id之外的所有文档属性进行深度克隆?
编辑:在遵循Zachary的示例后,我遇到了一些针对重复文档的自定义序列化类的问题.
class OptionHash
include Mongoid::Fields::Serializable
# Convert the keys from Strings to Symbols
def deserialize(object)
object.symbolize_keys!
end
# Convert values into Booleans
def serialize(object)
object.each do |key, value|
object[key] = Boolean::MAPPINGS[value]
end
end
Run Code Online (Sandbox Code Playgroud)
对于重复文档,对象为零.Car.find(old_id).attributes确实不包含自定义序列化的字段,为什么会这样,我该如何包含它?
好的,所以我的标题可能会令人困惑.我想要做的是循环遍历一组模型,前两个渲染模板,接下来的四个渲染一个不同的模板,然后两个渲染相同的模板,就像第一个模板一样,依此类推.
像这样:
<% ads.each do |ad| %>
<% # if it's 1-2, 7-8, 13-14 and so on render as big' %>
<%= render 'front/home/big_ad', ad: ad %>
<% # if it's 3-6, 9-12, 15-18 and so on render as small' %>
<%= render 'front/home/small_ad', ad: ad %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
什么是最干净的方法来实现这一目标?
我正在尝试使用method recreate_versions!但我正在使用wiki中的方法来创建唯一的文件名.问题是当我运行recreate_versions!它时更改文件名但它不会在已安装的对象本身上更新它们.我怎么能刷新这些URL?
你如何在mongoDB中的文档中存储开放时间,比如使用Mongoid可以轻松查询?我已经读过这个帖子,但我不确定如何根据我的需要实现它.
我需要能够每天添加多个打开和关闭时间,因为图书馆应该能够在白天关闭几个小时然后重新打开.
我需要能够在这些开放时间添加例外.例如; 在特定日期关闭星期一.
请分享一些关于如何以最灵活的方式做到这一点的最佳实践和经验.
ruby ×3
mongodb ×2
mongoid ×2
carrierwave ×1
erb ×1
facebook ×1
geolocation ×1
oauth-2.0 ×1
omniauth ×1
pagination ×1
random ×1
rubygems ×1