从Omniauth / Devise失败重定向错误

时间:2013-05-02 00:41:26

标签: ruby-on-rails devise omniauth

目前我的应用程序设置为使用Twitter和Facebook使用Omniauth和Devise。我的问题是当用户在Twitter上按下取消或Facebook没有授权它将我发送回设备/用户/ sign_in链接。问题是我需要回到root_url,但我不知道在哪里定义。

在我的User.rb中我有

devise :omniauthable, :omniauth_providers => [:facebook, :twitter]

在我的routes.rb中我有

devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks"}

那么,是否有一种简单的方法来修复重定向到的位置?我一直在谷歌搜索,虽然它可能正好在我面前,但却未能找到合适的解决方案。

同样在这个应用程序中,我们从不希望用户看到Devises Session#new page。有没有办法可以禁用它?

提前致谢...

2 个答案:

答案 0 :(得分:1)

在config / routes.rb

 root :to => 'your_home_controller#your_home_page' 
 devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
app / controllers / users / omniauth_callbacks_controller.rb

中的

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

 def facebook
 # You need to implement the method below in your model (e.g. app/models/user.rb)
 @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 root_path****
end
 end

end

答案 1 :(得分:-1)

为此,您将实现自己的回调。

在config / routes.rb中告诉我们回调函数在哪个控制器:

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

创建文件“app/controllers/users/omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  # Create a method with the same name as your provider, 
  # def facebook, def twitter 
  def facebook
    # Check if user authenticated with your facebook application or not. 
    # If not redirect to root_url 
  end
end

希望这能为您提供指导。

相关问题