簡體   English   中英

來自Omniauth的錯誤重定向/失敗時設計

[英]Bad redirect from Omniauth / Devise on Failure

目前,我的應用程序已設置為在Twitter和Facebook上使用Omniauth和Devise。 我的問題是,當用戶在Twitter上按“取消”或Facebook未經授權時,它會將我發送回至devises / users / sign_in鏈接。 問題是我需要它返回到root_url,但是我看不到在哪里定義它。

在我的User.rb中,

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

在我的routes.rb中

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

因此,是否有一種簡單的方法可以解決它重定向到的位置? 我一直在使用Google搜索,盡管可能就在我的面前,但仍未找到合適的解決方案。

同樣在此應用中,我們從不希望用戶看到Devises Session#new頁面。 有辦法禁用它嗎?

提前致謝...

在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

為此,您將實現自己的回調。

在config / routes.rb中,告訴devise我們的回調在哪個控制器中:

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

希望這能為您提供指導。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM