【问题标题】:How to merge facebook account into existing account with Devise如何使用 Devise 将 Facebook 帐户合并到现有帐户中
【发布时间】:2013-01-25 08:44:35
【问题描述】:

我按照here 的步骤操作,在合并帐户时遇到了一些问题

根据说明,我将以下方法添加到我的 ApplicationController

def after_sign_in_path_for(resource)
  # Merge data from Facebook with her current account
  if session["facebook_data"] && current_user.facebook_uid.nil?
    current_user.facebook_uid = session["facebook_data"]["uid"]
    current_user.save(:validate => false)
  end

  # Countermeasure against session fixation
  session.keys.grep(/^facebook\./).each { |k| session.delete(k) }

  super
end

但是,即使我在调用此方法的回调 app/controllers/users/omniauth_callbacks_controller.rb 中看到正确的会话值,我在 ApplicationController 中却得到了一个空会话 ["facebook_data"]:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def facebook
    user = User.find_for_facebook_oauth(env["omniauth.auth"], current_user)
    if user && user.persisted?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
      sign_in_and_redirect user, :event => :authentication
    else
      session["facebook_data"] = env["omniauth.auth"]
      redirect_to new_user_session_url # this redirect invokes the after_sign_in_path_for method in ApplicationController
    end
  end

end

我在这里错过了什么?

【问题讨论】:

    标签: facebook ruby-on-rails-3 session devise omniauth


    【解决方案1】:

    在众多原因中,有两个原因值得检查:

    1)ApplicationController 中的session["facebook_data"] 在被设置到omniauth_callbacks_controller.rb 之前被调用。

    解决方法:检查两个控制器的调用是否正确同步

    • 应该首先是omniauth_callbacks_controller.rb,然后是ApplicationController

    2) session["facebook_data"] 的值在 omniauth_callbacks_controller.rb 中设置后重置为 null

    解决方案:跟踪在omniauth_callbacks_controller.rb 中设置的session["facebook_data"] 值之后的调用,直到调用ApplicationController 中的session["facebook_data"]

    【讨论】:

    • 我意识到这是因为 session["facebook_data"] 设置为 null 但无法识别哪个控制器正在执行此操作。我最终添加了另一个哈希键 session["foo"] = session["facebook_data"] 并成功通过 session["foo"] 传递了值
    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2012-10-28
    • 2014-07-27
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2014-07-15
    相关资源
    最近更新 更多