【问题标题】:Which controller and action are being accessed with Rails, Devise, and Omniauth使用 Rails、Devise 和 Omniauth 访问哪个控制器和操作
【发布时间】:2015-12-17 16:47:16
【问题描述】:

我在我的 Rails 4 应用程序中使用了 Devise 和 Omniauth。在我看来,我有一个“使用 Facebook 登录”按钮,可将用户定向到 user_omniauth_authorize_path(:facebook)。这按预期工作并将用户发送到/users/auth/facebook。然后,该 URL 似乎正确地将用户重定向到 Facebook 登录页面。

如何确定此重定向正在使用哪个控制器/操作?我想在重定向到 Facebook 之前设置一个return_url。我可以在我的常规 SessionRegistration 控制器中通过子类化设计版本并添加我的代码来做到这一点,如下所示:

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


【解决方案1】:

看起来您可以将参数传递给user_omniauth_authorize_path,然后使用request.env["omniauth.params"] 在回调URL 中检索它们。所以,我把链接改成了:user_omniauth_authorize_path(:facebook, { return_url: '/test_redirect_path' }

然后在我的 OmniauthCallbacksController 中添加:

store_location_for(:user, request.env["omniauth.params"]["return_url"]) 在致电sign_in_and_redirect @user之前。

这似乎成功了。

【讨论】:

    猜你喜欢
    • 2016-02-03
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多