我在 Rails 应用程序中使用 Sorcery 库。其中一个模块用于外部身份验证,我需要向该模块添加一个方法。
现有代码在这里,我想从这个补丁add_provider_to_user
中添加方法。
所以,我在我的lib/modules
目录中添加了一个文件,我告诉 Rails 自动加载。该文件被调用sorcery_extension.rb
,它看起来像这样:
module Sorcery
module Controller
module Submodules
module External
module InstanceMethods
protected
# If user is logged, he can add all available providers into his account
def add_provider_to_user(provider)
provider_name = provider.to_sym
provider = Config.send(provider_name)
user_hash = provider.get_user_hash
config = user_class.sorcery_config
user = current_user.send(config.authentications_class.to_s.downcase.pluralize).build(config.provider_uid_attribute_name => user_hash[:uid], config.provider_attribute_name => provider)
user.save(:validate => false)
return user
end
end
end
end
end
end
这没有用。我进入undefined method error
我的控制器(调用其他巫术方法工作正常)。
所以,我对 ruby 的基本理解是您可以随时向对象或模块添加方法......我想我已经在文件中正确复制了模块的嵌套。我需要将模块文件命名为不同的名称吗?我不太确定如何做这种事情,所以非常感谢任何帮助。谢谢!