Railsアプリの認証にSorceryを使用しています。私はそれをうまく設定しました、私はユーザー名/パスワードまたは外部認証を介してユーザーを追加することができます(現時点ではTwitterのみを使用しています)。ただし、私が理解できていないことの1つは、既存のユーザーに認証を追加する方法です。ユーザー名で作成されたユーザーで、後でログインする手段として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を返します。
ソーサリーにはこれに対する公的な方法はありません。この機能をアプリにパッチする方法を誰かが理解しましたか?