小编Ale*_*vin的帖子

如何从Ruby on Rails应用程序返回正确的HTTP错误代码

我有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返回.如何返回正确的代码?

或者这是某种网络服务器可配置的东西?

ruby ruby-on-rails http

31
推荐指数
3
解决办法
5万
查看次数

Ruby on Rails:如何使用OAuth2 :: AccessToken.post?

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&...".仍然很高兴知道如何使用此方法记录.

ruby ruby-on-rails oauth-2.0

10
推荐指数
2
解决办法
5121
查看次数

迁移到OmniAuth 1.0:未定义的方法`user_omniauth_authorize_path'

试图将我的应用程序从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)

facebook ruby-on-rails devise omniauth

7
推荐指数
1
解决办法
3389
查看次数

Rails:更改区域设置和保留页面参数

我有一个导航栏,其中包含指向不同语言的链接:

<%= link_to t('header.english'), locale: "en" %>
Run Code Online (Sandbox Code Playgroud)

问题是当用户尝试在包含URL中的其他参数的页面上切换语言时.此时更改语言环境会重新加载页面并删除所有其他参数.

那么,如何将所有参数从当前页面传递到语言环境切换链接?

例如,何时

/page/new?param1=1&param2=2
Run Code Online (Sandbox Code Playgroud)

打开,用户切换语言环境,

/page/new?locale=en
Run Code Online (Sandbox Code Playgroud)

打开,两个附加参数都从网址中删除.

ruby-on-rails internationalization

7
推荐指数
2
解决办法
3691
查看次数

服务工作者到期

安装Service Worker后,Chrome浏览器需要多长时间才能检查其新版本?当前客户端服务工作者什么时候到期?

我正在尝试找出与服务工作者一起开发的最佳实践,并推动对prod的更改.目前,一旦对服务工作者的行为进行了实施更改,如果已经安装了以前的服务工作者,则客户端并不总是选择该服务器.

这个问题也有一定的相关性:以编程方式更新服务工作者 - 理想情况下,一旦对SW实施了更改,您就要强制在可能已有其早期版本的所有客户端上更新它.

google-chrome service-worker

7
推荐指数
2
解决办法
5220
查看次数

OmniAuth 1.1:nil的未定义方法`info':NilClass

将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)

ruby-on-rails omniauth

6
推荐指数
1
解决办法
2608
查看次数

Rails:激活SSL支持让Chrome感到困惑

有一个很好的选项来配置Rails应用程序:

config.force_ssl = true

但是,似乎只是将其设置为true并不会使HTTPS连接正常工作.更多 - 尝试(并失败)使用Chrome 连接到https:// localhost:3000后,我将此选项设置为false,即使我写了http,Chrome仍会尝试打开https.

所以,几个问题:

- 如何强迫Chrome不再尝试https? - 在我的Rails应用程序上启用SSL的正确方法是什么?

更新:该应用程序在Heroku上运行,似乎自动支持https.我可以在本地测试SSL吗?喜欢运行rails服务器?

ssl https ruby-on-rails

6
推荐指数
1
解决办法
2300
查看次数

Rails/Doorkeeper:无法验证CSRF令牌的真实性

我正在使用Rails 3.2和Doorkeeper gem为第三方提供OAuth 2 API.从应用程序外部使用我的REST API时,我不断收到此警告:

警告:无法验证CSRF令牌的真实性

客户端应用已成功通过OAuth2进行身份验证.为什么我会收到此警告,以及如何正确地为外部API实现此csrf?

ruby-on-rails csrf oauth-2.0

3
推荐指数
1
解决办法
2624
查看次数