使用devise和omniauth进行身份验证的Rails应用程序。只允许Facebook用户。 Facebook登录运行良好,omniauth回拨运行良好。
我的Gemfile包括基本内容,其中包括:
gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook'
在我的“书籍”视图控制器中,我添加了设计认证:
class BooksController < ApplicationController
before_filter :authenticate_user!
问题:当用户authenticate_user时!失败,设计重定向到sign_in页面(用户类型用户名,电子邮件,密码,确认)。我不想要这种行为,因为我只想要facebook用户。如果authenticate_user失败,我需要设计重定向到facebook登录。
如果用户未经过身份验证,如何设计重定向到Facebook登录?
答案 0 :(得分:3)
最好的方法是使用custom devise failure app
并覆盖redirect
功能。
下面的内容会起作用:
custom_failure_app.rb
。CustomFailureApp
Devise::FailureApp
覆盖redirect
功能。
class CustomFailureApp < Devise::FailureApp
# will be called wen some failure occurs.
# Like unauthorized, session_expiry etc
def redirect
message = warden.message || warden_options[:message]
if message == :timeout
# session expires
else
# unauthorized
# redirect_to "facebook.com"
end
end
end
添加其他初始值设定项,例如devise.rb
,并将以下代码放入其中。
Devise.setup do |config|
config.warden do |manager|
manager.failure_app = CustomFailureApp
end
end
答案 1 :(得分:0)
您可以尝试添加
match '/auth/failure', :to => 'your_controller#failure'
到您的routes.rb
,然后从控制器内的故障方法中重定向。
答案 2 :(得分:0)
Ryan Bates提供了精彩的截屏视频http://railscasts.com/episodes/360-facebook-authentication如何使用“omniauth-facebook”宝石。您可以使用此修补程序使用标准设计方法登录:Sign in to Devise using omniauth-facebook