scu*_*omb 14 ruby-on-rails omniauth
我正在通过Ryan Bates railscast#235 OmniAuth第1部分,使用OmniAuth gem允许用户使用Twitter或Facebook以及更高版本的Google Apps登录我的网络应用程序.
现在我遇到了这个错误
Routing Error
No route matches [GET] "/auth/twitter"
Run Code Online (Sandbox Code Playgroud)
我已经正确设置了routes.rb文件来处理auth回调提供程序匹配,如下所示:
match "/auth/:provider/callback" => "authentications#create"
Run Code Online (Sandbox Code Playgroud)
当我链接到localhost:3000/auth/twitter时,我收到此错误.Bates在他的Railscast -07:36.
什么可能解决这个问题?这会是routes.rb的问题吗?还是omniauth.rb?
我们的omniauth.rb看起来像这样:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, 'OURCONSUMERKEY', 'OURCONSUMERSECRET'
provider :twitter, 'OURCONSUMERKEY', 'OURCONSUMERSECRET'
end
Run Code Online (Sandbox Code Playgroud)
Tom*_*ogg 17
您需要在Devise gem使用的模型中注释掉':omniauthable'(通常是模型'User'= user.rb文件):
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable,
:rememberable, :trackable, :validatable # plus whatever other calls...
# :omniauthable
[...]
end
Run Code Online (Sandbox Code Playgroud)
使用':omniauthable'调用意味着加载devise/omniauth组件(这会导致与omniauth设置冲突).
lik*_*sky 10
fyi,如果你遇到这个问题并且你正在将Devise 2.1.x与OmniAuth 1.x和OAuth2结合起来,请注意现在最好的做法是使用/users/auth/facebook(即控制器中的目录,' users/'). ..
因此,你需要点击/users/auth/facebook,尽管OmniAuth的几乎所有教程,示例和指南都说要点击/auth/facebook!这(结合Facebook不会更新我的网站URL直到我添加端口#:3000,保存,传播并点击它,然后再将其删除)这一事实,让我难以忍受一段时间,这将保持不言而喻,以保护懊恼.:-)
此外,不像现在大多数选票的答案 - 当然解决问题,但不允许你与Devise集成 - 我不需要:omniauthable从Devise中删除(一旦我点击了正确的URL).当我使用错误的URL时,它只会"导致冲突".
编辑:此外,与原始问题不同,使用Devise 2.1.x和OmniAuth 1.x,据我所知,人们不需要omniauth.rb为Rack 创建一个命名初始化程序 - 使用Devise,你只需要添加你的OmniAuth位到config/initializers/devise.rb(但不是100%肯定这个).有关更多详细信息,请参阅顶部的Facebook示例部分下的plataformatec/devise的OmniAuth概述.
小智 0
SB,我可以提个建议吗?首先查找第 241 集。这是比较简单的情节。我倾向于认为你的问题不在于routes.rb。我正在使用 OmniAuth 来验证用户身份并代表我的用户发送推文,而我拥有的该部分的唯一路由是:
match "/auth/twitter/callback" => "sessions#create"
match "/signout" => "sessions#destroy", :as => :signout
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7589 次 |
| 最近记录: |