1

使用设计和omniauth 进行身份验证的Rails 应用程序。只允许 facebook 用户。Facebook 登录运行良好,omniauth 回调运行良好。

我的 Gemfile 包括基本的,其中包括:

gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook'

在我的“书籍”视图控制器中,我添加了设计身份验证:

class BooksController < ApplicationController
before_filter :authenticate_user!

问题:当用户 authenticate_user!失败,设计重定向到登录页面(用户输入用户名、电子邮件、密码、确认)。我不想要这种行为,因为我只想要 facebook 用户。如果 authenticate_user 失败,我需要设计重定向到 facebook 登录。

当用户未通过身份验证时,如何设计重定向到 Facebook 登录?

4

3 回答 3

4

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

像下面这样的东西会起作用:

  1. 创建一个初始化程序,例如custom_failure_app.rb.
  2. 创建一个CustomFailureApp将继承的类Devise::FailureApp
  3. 覆盖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
    
  4. 添加另一个初始化程序,例如devise.rb并将以下代码放入其中。

    Devise.setup do |config|
      config.warden do |manager|
        manager.failure_app = CustomFailureApp
      end
    end
    
于 2012-11-23T17:10:52.210 回答
0

您可以尝试添加

match '/auth/failure', :to => 'your_controller#failure'

到您的routes.rb,然后从控制器内部的故障方法中重定向。

于 2012-11-23T16:59:20.717 回答
0

Ryan Bates 提供了很棒的截屏视频http://railscasts.com/episodes/360-facebook-authentication如何使用“omniauth-facebook” gem。您可以使用此修复程序使用标准的设计方法登录:使用omniauth-facebook 登录到设计

于 2013-06-05T15:26:50.060 回答