Я использую Sorcery для аутентификации в приложении Rails. У меня все настроено нормально, я могу добавлять пользователей по имени пользователя/паролю или через внешнюю аутентификацию (в данный момент только с помощью твиттера). Однако одна вещь, которую я не смог понять, - это как добавить аутентификацию для существующих пользователей, т.е. пользователь, созданный по имени пользователя, который может позже добавить свою учетную запись Twitter в качестве средства входа в систему.
Я попытался добавить метод во внешний модуль, чтобы включить эту функцию...
module Sorcery
module Controller
module Submodules
module External
module InstanceMethods
protected
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
... но это не сработало. Кажется, я не могу заставить класс Config вести себя так, как во внутренних методах, Config.send('twitter')
всегда возвращает nil вместо провайдера.
В Sorcery для этого нет общедоступных методов. Кто-нибудь понял, как пропатчить эту функцию в приложении?