And*_*vey 6 ruby-on-rails devise omniauth
任何人都可以帮我解决这个问题的根源吗?
我在Rails 3.2应用程序中使用Devise + Omniauth.我想知道的是,用Devise的user_omniauth_authorize_path(provider)方法在幕后发生了什么.
我已经通过rake路线和宝石的来源进行了挖掘,但是我看不到任何明显的东西会导致我遇到的问题.
我假设这个方法只是调用提供者的登录URL(例如Twitter),然后返回到routes.rb中定义的回调路径.
在我的routes.rb我有
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks'}
devise_scope :user do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
Run Code Online (Sandbox Code Playgroud)
在users/omniauth_callbacks_controller.rb我有
def twitter
render :text => "This works"
end
def passthru
render :text => "This doesn't work"
end
Run Code Online (Sandbox Code Playgroud)
在我看来<%= link_to "Twitter", user_omniauth_authorize_path(:twitter) %>.点击此链接转到我可以登录的Twitter,但在返回我的应用程序后,我收到错误"您已登录".
我无法弄清楚如何或为什么生成此错误.我应该只看到"这个有效"或"这不起作用".
我也有一个Facebook提供商以完全相同的方式设置,这可以按预期工作.
如果我替换Devise的omniauth链接,<a href="/users/auth/twitter">Twitter</a>那么我得到"This works".
所以这解决了我的问题,但它并不理想,我想知道为什么.
谁能摆脱任何光明?
编辑
Rake路线如下所示:
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:twitter|facebook)
Run Code Online (Sandbox Code Playgroud)
嗯,它对我有用,所以这绝对是你的事情。首先,您是否在控制台中比较了 GET 调用/users/auth/twitter并/users/auth/twitter?callback通过两种不同的方法获取?它们应该看起来完全相同(当然,除了令牌和验证器)。
现在,我不确定这是否相关,但是使用 devise,您不使用通路路由,因此您可以删除该路由。相反,在回调控制器中,您应该实现一个名为 failure 的操作来处理错误的请求。请参阅此处了解设备的实现。
我在这里抓住了救命稻草,但你也应该在你的回调控制器的末尾有这个:
# This is necessary since Rails 3.0.4
# See https://github.com/intridea/omniauth/issues/185
# and http://www.arailsdemo.com/posts/44
protected
def handle_unverified_request
true
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5264 次 |
| 最近记录: |