【问题标题】:Integrating Devise with Twitter将设计与 Twitter 集成
【发布时间】:2011-08-20 06:31:01
【问题描述】:

我目前正在使用guide 尝试将 twitter 集成到 Devise。

这有点挑战性,因为 twitter 的 OAuth 不提供电子邮件地址。因此,注册流程应该是:

  1. 用户点击“使用 twitter 登录”
  2. Oauth 回调到 twitter 的回调
  3. 向用户询问电子邮件(我的网站需要)
  4. 登录用户。

我意识到如果用户已经在我的系统上拥有 Twitter 帐户,我必须能够找到该帐户。因此,我在用户模型中添加了 2 个额外字段:oauth_provider、oauth_uid

在 omniauth_callbacks_controller 中:

定义推特 @user = User.find_for_twitter_oauth(env["omniauth.auth"], current_user)

if @user.persisted?
  flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Twitter"
  sign_in_and_redirect @user, :event => :authentication
else
  flash[:warn] = "We still need a little more info!"
  redirect_to new_user_registration_url
end

结束

在user.rb中

  # The trick here is that twitter does not give you an email back
  # So we should make use of uid and provider
  def self.find_for_twitter_oauth(oauth_hash, signed_in_resource=nil)
    uid = oauth_hash['uid']
    if user = User.find_by_oauth_provider_and_oauth_uid('twitter', uid)
      user
    else 
      User.create(:password => Devise.friendly_token[0,20],
                  :oauth_provider => "twitter", 
                  :oauth_uid => oauth_hash['uid'])
    end
  end

但是,我已经对此进行了彻底的调试,并意识到如果我将用户重定向到 new_registration_url,则在 user.rb 中创建的用户将被擦除。

我怎样才能做到以下几点:

  1. 如果无法通过 oauth_provider 和 oauth_uid 找到用户,请使用这些凭据创建一个用户对象
  2. 将用户引导至 new_registration_url
  3. 当用户提交了他/她的电子邮件后,使用在 1) 中创建的相同用户对象创建用户

我尝试过使用 session,但它变得非常混乱,因为我必须修改 devise 的新补丁并为registrationscontroller.rb 创建。

请有人给我一个方法来做到这一点。

我还没有成功。让我给你看看我写了什么。

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    我关注了这 2 个截屏视频,这正是您想要的。

    你可以试试看!他正在使用omniauth gem,它非常简单而且很棒:-)

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

    http://railscasts.com/episodes/236-omniauth-part-2

    【讨论】:

    • 是的,现在我想坚持使用 Devise,因为那些截屏视频已经过时了(IRC 上有人提到过)。 AFAIK Devise 现在支持 Omniauthable 开箱即用
    • 你仍然可以知道他是怎么做的。你真的想要和他一样。即使有万能的设计。
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多