【发布时间】:2015-12-17 16:47:16
【问题描述】:
我在我的 Rails 4 应用程序中使用了 Devise 和 Omniauth。在我看来,我有一个“使用 Facebook 登录”按钮,可将用户定向到 user_omniauth_authorize_path(:facebook)。这按预期工作并将用户发送到/users/auth/facebook。然后,该 URL 似乎正确地将用户重定向到 Facebook 登录页面。
如何确定此重定向正在使用哪个控制器/操作?我想在重定向到 Facebook 之前设置一个return_url。我可以在我的常规 Session 和 Registration 控制器中通过子类化设计版本并添加我的代码来做到这一点,如下所示:
class Users::SessionsController < Devise::SessionsController
def new
return_url = params[:return_url]
store_location_for(:user, return_url) unless return_url.nil?
super
end
end
然后,我告诉 devise 使用我的新控制器:
devise_for :users, controllers: { sessions: 'users/sessions' }
我正在尝试使用omniauth 功能完成同样的事情?当用户访问/users/auth/facebook 时,有什么方法可以找出正在访问哪个控制器?如果是这样,我可以像上面那样子类化它并添加功能吗?
更新
我通过运行“rake routes”找到了控制器/动作。它是这样说的:
user_omniauth_authorize GET|POST /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/facebook/}
所以我能够找到正在使用的passthru 方法,但这让我更加困惑。它在Devise::OmniauthCallbacksController 中并说:
def passthru
render status: 404, text: "Not found. Authentication passthru."
end
我很困惑这种方法是如何导致用户被重定向到 Facebook 的。
【问题讨论】:
-
看看link你需要添加一个callback_url :)
-
我认为这不是我想要的。 callback_url 是从 Facebook 发回用户时处理请求的 url。这是为应用程序全局设置的。我希望在将用户发送到 Facebook 之前设置一个 redirect_url,然后确保 callback_url 最终将用户重定向到设置的那个 URL。
-
这很可悲,因为我遇到了同样的问题,而您实际上从未找到问题的“原因”(它没有通过您的控制器),只是找到了解决方法。我还在寻找。
标签: ruby-on-rails facebook devise omniauth