我正在使用devise + omniauth在我的网站上启用facebook / linkedin / twitter登录。
我有多个模型,角色完全不同,都需要社交登录,我现在已经成功使用了devise + omniauth,因为我只需要登录一次。
然而现在设计给出了错误,说我不能在多个模型上使用omniauthable。
我环顾四周,有人非常乐于帮助创建this wiki,解释如何在不使用omniauthable模块的情况下使用omniauth。
但是我认为既然我想将它用于不同的模型,我将不得不使用不同的路径进行注册,这个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 / everywhere所以不确定它有什么问题。
任何帮助?