【问题标题】:Devise omniauth(oauth) sign_in, and sign_up path setting设计omniauth(oauth)sign_in和sign_up路径设置
【发布时间】:2016-09-05 18:50:09
【问题描述】:

我想分离我的 oauth 重定向路径。一个用于 facebook 和 google(register/info1),另一个用于 twitter(register/info2)。

  1. 我的用户在第一次注册时会转到 register/info(1/2) 页面。
  2. 用户下次注册登录后,会转到home/main,而不是register/info(1/2)

    但是after_sign_up_path_for 方法在omniauth_callback_controller 中不起作用。所以,用户总是去register/info(1/2)。 目前,我将我的omniauth_callback_controllers.rb 设置为这样。

类用户::OmniauthCallbacksController

   def self.provides_callback_for(provider)
     class_eval %Q{
       def #{provider}
         @user = User.find_for_oauth(env["omniauth.auth"], current_user)
         if @user.persisted?
           sign_in_and_redirect @user, event: :authentication
         else
           session["devise.#{provider}_data"] = env["omniauth.auth"]
           redirect_to new_user_registration_url
         end
       end
      }
  end


  [:twitter, :facebook, :google_oauth2].each do |provider|
    provides_callback_for provider
  end



  def after_sign_in_path_for(resource)
      auth = request.env['omniauth.auth'] 
      @identity = Identity.find_for_oauth(auth)

      @user = User.find(current_user.id)
      if @user.persisted?
        if @identity.provider == "twitter"
          register_info2_path
        else
          register_info1_path
        end
      else
        home_main_path
      end
  end

如果您有任何想法或相关文件,请告诉我。谢谢。

【问题讨论】:

    标签: ruby-on-rails oauth devise


    【解决方案1】:

    您可以在 omniauth.rb 初始化程序中设置每个策略的回调路径:

    例如:

    Rails.application.config.middleware.use OmniAuth::Builder do
        provider :facebook, "app_id", "password",
            scope: 'public_profile', info_fields: 'id,name,link', display: 'popup', callback_path: '/stores/facebook_callback'
    
    end
    

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 2011-05-27
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      相关资源
      最近更新 更多