【发布时间】:2014-05-28 05:09:04
【问题描述】:
我正在关注具有多个提供商的 Devise+Omniauth+Rails 4 教程。我的代码与sourcery tutorial 中的示例非常接近,只是我已经放弃了可确认模块并将linkedin 更改为google_oauth2。
一切正常,直到我到达回调,然后 rails 引发此错误:
NameError - undefined local variable or method `provider' for #<OmniauthCallbacksController:0x007fa8312a5298>:
(eval):7:in `twitter'
这是我的 OmniauthCallbacksController(几乎与上面的链接相同):
class OmniauthCallbacksController < Devise::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
set_flash_message(:notice, :success, kind: provider.capitalize) if is_navigational_format?
else
session["devise.#{provider}_data"] = env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
}
end
[:twitter, :facebook, :google_oauth2].each do |provider|
self.provides_callback_for provider
end
end
【问题讨论】:
标签: twitter ruby-on-rails-4 devise omniauth