【问题标题】:Facebook Graph API with Rails and Authlogic - preferred methodology?带有 Rails 和 Authlogic 的 Facebook Graph API - 首选方法?
【发布时间】:2010-06-17 22:09:25
【问题描述】:

有很多 Facebook + Rails 解决方案,最著名的是 Facebooker,但这个和许多其他解决方案与 Rails 3 不兼容。我目前正在使用 Authlogic 对我的应用程序进行身份验证,我想为用户提供 Facebook 选项登录。我想找到让 FB 和 Authlogic 结合使用的最佳方式;现在我只是在为 Facebook 编写自己的 Authlogic 插件,但如果这已经完成,那么我不想重做别人的工作。有人知道这样的事吗?

【问题讨论】:

    标签: ruby-on-rails facebook authlogic ruby-on-rails-3


    【解决方案1】:

    这个区域似乎在不断变化。我很难用 Rails 3 来设置它,因为主要的 Ruby facebook 库都没有正式更新,而且最新的也没有文档记录。

    我使用 Rails 3 的方法是使用 Facebooker2 和 Mogli。我基本上采用了 mogli + authlogic oauth 控制器代码posted here 并将其与 Facebooker2 的控制器和辅助方法相结合。 Facebooker2 和 Mogli 没有文档(据我所知),但 Facebooker2 代码相对简单。

    我还必须手动处理一些 authlogic 验证,以便让它们仅在非 Facebook 注册时触发。以下是用户模型中所有 authlogic 特定的代码:

    class User < ActiveRecord::Base
    
      acts_as_authentic do |config|
        config.validate_email_field = false
      end
    
      validates_length_of :email, :within => 6..100, :if => :is_not_fb_user?
      validates_format_of :email, :with => Authlogic::Regex.email, :if => :is_not_fb_user?
      validates_uniqueness_of :email, :if => :is_not_fb_user?
    
      def is_fb_user?
        return false if self.fb_uid.blank? || self.fb_uid == 0 || self.fb_at.blank? 
        return true 
      end
      def is_not_fb_user?; !self.is_fb_user? end
    
      def require_password?
        if self.is_fb_user?
          false
        else
          new_record? || password_changed? || send(crypted_password_field).blank?
        end
      end
    end
    

    可能存在一些错误,我怀疑有更好的方法来解决这个问题。

    【讨论】:

      【解决方案2】:

      一位朋友为我们的应用程序开发了这个 gem,所以也许它对您的应用程序也有用:http://github.com/pfracarolli/facebook-graph

      【讨论】:

      • 这个 gem 有没有可用的文档?
      【解决方案3】:

      使用 Omniauth。有一个关于这个主题的railscast。我相信他甚至将它与 Authlogic 结合使用:

      http://railscasts.com/episodes/235-omniauth-part-1

      只需几行到您的 SessionsController,然后在 config/initializers/omniauth.rb 的配置文件中添加几行,您或多或少就完成了。

      【讨论】:

      • 在介绍中明确指出:In this episode we start integrating it with *Devise*.
      猜你喜欢
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2017-03-29
      相关资源
      最近更新 更多