【问题标题】:Multiple models with devise + omniauth in Rails在 Rails 中使用 devise + omniauth 的多个模型
【发布时间】:2013-12-27 09:21:12
【问题描述】:

我正在使用 devise + omniauth 在我的网站上启用 facebook/linkedin/twitter 登录。

我有多个角色完全不同的模型,并且都需要社交登录,我现在一直在成功使用 devise+omniauth,因为我只需要一次登录。

但是现在 devise 给出了错误,说我不能在多个模型上使用omniauthable。

我环顾四周,有人帮助创建this wiki,解释如何在没有omniauthable 模块的情况下将omniauth 与devise 一起使用。

但我想既然我想将它用于不同的模型,我将不得不使用不同的注册路径,这个 wiki 没有解释。

我查看了omniauth,它有一些关于选项request_path 和callback_path 似乎相关的稀缺细节,但我无法弄清楚到底需要做什么。

任何帮助将不胜感激。

编辑 这是我到目前为止所做的。

# omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
    FACEBOOK_AUTH_REGEX = /^\/(model1|model2)\/auth\/facebook\/$/
    FACEBOOK_CALLBACK_REGEX = /^\/(model1|model2)\/auth\/facebook\/callback\/$/

    LINKEDIN_AUTH_REGEX = /^\/(model1|model2)\/auth\/linkedin\/$/
    LINKEDIN_CALLBACK_REGEX = /^\/(model1|model2)\/auth\/linkedin\/callback\/$/

    facebook_callback_path = lambda do |env|
        env["PATH_INFO"] =~ FACEBOOK_CALLBACK_REGEX
    end

    linkedin_callback_path = lambda do |env|
        env["PATH_INFO"] =~ LINKEDIN_CALLBACK_REGEX
    end

    facebook_request_path = lambda do |env|
        match_data = FACEBOOK_AUTH_REGEX.match env["PATH_INFO"]
        if match_data
            "/#{match_data[1]}/auth/facebook/callback/"
        end
    end
    linkedin_request_path = lambda do |env|
        match_data = LINKEDIN_AUTH_REGEX.match env["PATH_INFO"]
        if match_data
            "/#{match_data[1]}/auth/linkedin/callback/"
        end
    end
    provider :facebook, FACEBOOK_ID, FACEBOOK_SECRET, :callback_path => facebook_callback_path, :request_path => facebook_request_path
    provider :linkedin, LINKEDIN_ID, LINKEDIN_SECRET, :callback_path => linkedin_callback_path, :request_path => linkedin_request_path
end

#routes.rb
match "/:model_name/auth/:provider/callback/", :to => "recruiter_omniauth_callbacks#sync"

它似乎适用于linkedin,但在facebook我得到

{"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}

不知道为什么我会得到这个,它说的两个网址应该相同,我想我到处都在使用 :model_name/auth/facebook/callback/ 所以不确定它有什么问题。

有什么帮助吗?

【问题讨论】:

    标签: ruby-on-rails facebook devise omniauth


    【解决方案1】:

    我发布了一个类似案例here 的示例,并从其他角度解决了该问题,希望对您有所帮助,问候!

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多