我有RoR 3.0 Web应用程序,它充当OAuth API提供程序.现在,在API中我想向API使用者返回正确的HTTP错误代码.我该怎么做呢?
这是一个例子:
def destroy_oauth
@item = Item.find(params[:id])
if(!@item.nil? && @item.user_id == current_user.id)
@item.destroy
respond_to do |format|
format.js
format.xml
end
else
raise ActionController::RoutingError.new('Forbidden')
end
end
Run Code Online (Sandbox Code Playgroud)
因此,如果出现错误,我正在尝试返回Forbidden 403代码.仍然,当运行这个时,我总是得到404 Not Found返回.如何返回正确的代码?
或者这是某种网络服务器可配置的东西?
OAuth2 :: AccessToken.post()方法在文档中指定如下:
(对象)post(path,opts = {},&block)
我试图传递一些论点,但似乎我做错了:
response = token.post('/oauth/create.js', {:title => "title", :description => "desc"})
Run Code Online (Sandbox Code Playgroud)
参数永远不会达到方法,值总是为零.那么,使用post方法和参数的正确方法是什么?什么是&块?
我也得到了警告:无法验证CSRF令牌的真实性.这也可能导致问题.案例是我在应用程序外部使用OAuth api.OAuth 2通过Doorkeeper gem实现.
更新:在我定义范围后,CSRF警告现在消失了.此外,我设法通过提供url的一部分来使用带有参数的post()方法:"?title = test&...".仍然很高兴知道如何使用此方法记录.
试图将我的应用程序从Rails 3.0迁移到3.2,作为其中的一部分,我也在更新Devise gem.原来,新的Devise需要新的OmniAuth宝石.我有使用OmniAuth配置的Facebook授权.阅读迁移指南后,我还添加了omniauth-facebook gem并在devise.rb中进行了配置.
现在我收到这个错误:
ActionView :: Template :: Error(##:0x00000003b01e88>的未定义方法`user_omniauth_authorize_path')
我正在使用这条路径登录Facebook登录按钮.我现在该怎么用?
用户模型包含此(user.rb):
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable
Run Code Online (Sandbox Code Playgroud)
完整服务器日志:
Started GET "/" for 127.0.0.1 at 2012-02-22 10:39:27 +0200
Processing by PagesController#guardian as HTML
[paperclip] Duplicate URL for photo with /system/:attachment/:id/:style/:filename. This will clash with attachment defined in Asset class
Rendered pages/guardian.html.erb within layouts/application (955.6ms)
Completed 500 …
Run Code Online (Sandbox Code Playgroud) 我有一个导航栏,其中包含指向不同语言的链接:
<%= link_to t('header.english'), locale: "en" %>
Run Code Online (Sandbox Code Playgroud)
问题是当用户尝试在包含URL中的其他参数的页面上切换语言时.此时更改语言环境会重新加载页面并删除所有其他参数.
那么,如何将所有参数从当前页面传递到语言环境切换链接?
例如,何时
/page/new?param1=1¶m2=2
Run Code Online (Sandbox Code Playgroud)
打开,用户切换语言环境,
/page/new?locale=en
Run Code Online (Sandbox Code Playgroud)
打开,两个附加参数都从网址中删除.
安装Service Worker后,Chrome浏览器需要多长时间才能检查其新版本?当前客户端服务工作者什么时候到期?
我正在尝试找出与服务工作者一起开发的最佳实践,并推动对prod的更改.目前,一旦对服务工作者的行为进行了实施更改,如果已经安装了以前的服务工作者,则客户端并不总是选择该服务器.
这个问题也有一定的相关性:以编程方式更新服务工作者 - 理想情况下,一旦对SW实施了更改,您就要强制在可能已有其早期版本的所有客户端上更新它.
将OmniAuth gem更新为1.1后出现此错误:
Started GET "/users/auth/facebook" for 127.0.0.1 at 2012-04-13 11:31:37 +0300
NoMethodError (undefined method `info' for nil:NilClass):
omniauth (1.1.0) lib/omniauth/strategy.rb:151:in `log'
omniauth (1.1.0) lib/omniauth/strategy.rb:190:in `request_call'
omniauth (1.1.0) lib/omniauth/strategy.rb:174:in `call!'
omniauth (1.1.0) lib/omniauth/strategy.rb:157:in `call'
omniauth (1.1.0) lib/omniauth/builder.rb:48:in `call'
Run Code Online (Sandbox Code Playgroud)
我正在使用omniauth通过Facebook授权用户.捆绑更新,现在点击"登录到Facebook"收到此错误.
另一个问题 - 有没有办法回滚捆绑宝石更新?也许每次创建一个新的rvm设置?
恢复到OmniAuth 1.0.2解决了这个问题.
这是上次更新的宝石的完整日志:
Using rake (0.9.2.2)
Using i18n (0.6.0)
Using multi_json (1.0.4)
Installing activesupport (3.2.2)
Using builder (3.0.0)
Installing activemodel (3.2.2)
Using erubis (2.7.0)
Using journey (1.0.3)
Using rack (1.4.1)
Installing rack-cache (1.2)
Using rack-test (0.6.1)
Using hike (1.2.1) …
Run Code Online (Sandbox Code Playgroud) 有一个很好的选项来配置Rails应用程序:
config.force_ssl = true
但是,似乎只是将其设置为true并不会使HTTPS连接正常工作.更多 - 尝试(并失败)使用Chrome 连接到https:// localhost:3000后,我将此选项设置为false,即使我写了http,Chrome仍会尝试打开https.
所以,几个问题:
- 如何强迫Chrome不再尝试https? - 在我的Rails应用程序上启用SSL的正确方法是什么?
更新:该应用程序在Heroku上运行,似乎自动支持https.我可以在本地测试SSL吗?喜欢运行rails服务器?
我正在使用Rails 3.2和Doorkeeper gem为第三方提供OAuth 2 API.从应用程序外部使用我的REST API时,我不断收到此警告:
警告:无法验证CSRF令牌的真实性
客户端应用已成功通过OAuth2进行身份验证.为什么我会收到此警告,以及如何正确地为外部API实现此csrf?