6

我已经开始将 facebook 身份验证集成到我的 Rails 3.1 站点中,但是当我单击 fb auth 对话框上的取消按钮时遇到了问题。当我单击取消时,我被重定向回我的站点 /auth/facebook/callback,然后重定向到 /login 页面(我正在使用 Devise)。

我想要做的是将取消的身份验证重定向到允许用户以标准方式(电子邮件、用户名、密码等)创建帐户的页面。如何覆盖重定向到 /login 页面?

顺便说一句,我正在使用omniauth-facebook gem。

谢谢!

4

2 回答 2

3

在您的 omniauth 回调控制器中添加失败方法并定义您的自定义行为。

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def facebook
        @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)

    if @user.persisted?
      sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
      set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
    else
      session["devise.facebook_data"] = request.env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end

  def failure
    redirect_to root_path // here
  end

end
于 2014-03-12T04:09:08.663 回答
0

我认为您可能能够在您的omniauth 配置中覆盖默认的on_failure 行为,我没有使用设计,但正在使用omniauth-facebook gem,并且在以下方面取得了成功:

OmniAuth.config.on_failure = Proc.new { |env|
  OmniAuth::FailureEndpoint.new(env).redirect_to_failure
} 

或更自定义的东西,例如:

OmniAuth.config.on_failure do |env|
  new_path = "#{env['SCRIPT_NAME']}#{OmniAuth.config.path_prefix}/failure?message=#{error_type}"

  [302, {'Location' => new_path, 'Content-Type'=> 'text/html'}, []]
end
于 2012-07-11T21:09:42.947 回答