[英]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.