如何在用户未经过身份验证时将设计重定向到Facebook登录?

时间:2012-11-23 16:47:36

标签: ruby-on-rails devise omniauth

使用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登录?

3 个答案:

答案 0 :(得分:3)

最好的方法是使用custom devise failure app并覆盖redirect功能。

下面的内容会起作用:

  1. 创建初始值设定项,例如custom_failure_app.rb
  2. 创建一个将继承CustomFailureApp
  3. 的班级Devise::FailureApp
  4. 覆盖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
    
  5. 添加其他初始值设定项,例如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