2

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

ソーサリーにはこれに対する公的な方法はありません。この機能をアプリにパッチする方法を誰かが理解しましたか?

4

2 に答える 2

0

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

user モデルに access_token を保存しようとすることを警告する必要があります...おそらくそれを削除したいと思うでしょう。ここで変更を参照してください: https://github.com/rcarter/sorcery/commit/f3984749659bceb7f7438cae8ea95ba5a415d1e2

于 2012-05-09T20:52:25.520 に答える
0

これは非常に古い質問ですが、Microsoft ID でこれを行うためのソリューションを追加したかっただけです。ユーザーが Microsoft SSO を使用してログインする必要がありました。ユーザー アカウントを作成し、Microsoft 資格情報を使用してログインするようにセットアップできるようにしたいと考えていました。Ruby 2.7、Rails 5.1、Sorcery 0.15 を使用しています。https://github.com/Sorcery/sorcery/wiki/Externalから始めるために、ソーサリー wiki の外部プロバイダーのサンプル コードを使用しました。

Azure Active Directory 側:

  1. Web アプリを登録済みアプリケーションとして追加する
  2. ユーザーの .csv をダウンロードし、その情報を使用してユーザー テーブルにユーザー プロファイルを作成します。メールアドレスがユーザー名になります。
  3. 登録済みアプリの下の Azure でクライアント シークレットを作成します。
  4. 次のようなアプリの Web リダイレクト URI を追加します。http://localhost:32795/oauth/callback?provider=microsoft

アプリで:

  1. Authentications テーブルにユーザーの認証エントリを作成します。各ユーザーには、Users テーブルの user_id、ダウンロードした .csv ファイルの "id" である uid (Azure ではオブジェクト ID)、プロバイダーはmicrosoft.
  2. MSFT コールバックのルートを追加するget "/oauth/callback/microsoft" => "oauths#callback" # for microsoft
  3. で外部プロバイダーをセットアップします。

app/config/initializers/sorcery.rb

config.microsoft.key = <your Application(client)ID>
config.microsoft.secret = <client secret you generated in Azure>
config.microsoft.callback_url = "http://localhost:3000/oauth/callback?provider=microsoft"
config.microsoft.user_info_mapping = {:email => "userPrincipalName", :username => "userPrincipalName"}
config.microsoft.scope = "openid email https://graph.microsoft.com/User.Read"

アプリケーションは、ログインに MSFT ID を使用するようになりました。アプリでログアウトしても、リンクをクリックして MSFT でログインすると、MSFT 資格情報がブラウザーによって保存されるため、自動的にログインすることに注意してください。MSFT アカウントに移動してログアウトする場合は、Azure でログアウト URI を設定して、アプリにもログアウトするように指示する必要があります。または、ログアウト時にオフィスの Cookie を削除するようにアプリを設定することもできます。

于 2020-08-30T07:23:34.890 に答える