2012-04-30 25 views
2

RailsアプリケーションでSorcery for Authenticationを使用しています。私はそれがうまく設定して、私はユーザー名/パスワードまたは外部認証(現時点ではTwitterを使用して)を介してユーザーを追加することができます。しかし、私が把握できなかったことの1つは、既存のユーザーに認証を追加する方法です。後でログの手段として自分のTwitterアカウントを追加することもできますユーザ名で作成したユーザー。Rails + Sorcery:既存のユーザーに外部認証を追加する

は私が...この機能を有効にするために、外部モジュールにメソッドを追加すること

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を返します。

ソーサリーでは、このためのパブリックメソッドはありません。誰もがこの機能をアプリにパッチする方法を考え出したのですか?

+0

私は、魔法の外部モジュールに「パッチを当てた」ものとして私の認証コントローラを使って解決したソリューションにも同様に興味があります。上記の例は、githubで見たいくつかのパッチ要求に基づく私の試みです。 – Andrew

答えて

0

私は最近、https://github.com/rcarter/sorceryを使用して、プロバイダを既に認証されたユーザーにリンクする機能を追加しました。これはあなたが探していることをしていますか?

私はあなたのUserモデルにaccess_tokenを保存しようとしていますが、それを削除することをお勧めします。ここでの変更を参照してください。https://github.com/rcarter/sorcery/commit/f3984749659bceb7f7438cae8ea95ba5a415d1e2

関連する問題