SAML plugin in repo. Multisite の議論の続きです:
SAML プラグイン内の以下のコードを使用して、ユーザーが正常に認証された後に自動的にアカウントを作成しようとしています。これにより、ユーザーがメールアドレス、ユーザー名、名前を変更できる可能性のあるログインダイアログに表示されることを防ぎたいと考えています。ユーザーにはこれらの設定を制御させず、SAML 認証に基づいて自動的に設定されるようにしたいです。
私の app.yml ファイルには以下が含まれています:
...
# SAML アサートから fullName 属性を強制し、name 属性を上書きします。
# これにより、ユーザーのフルネームが Discourse の Name フィールドにマッピングされ、
# ポストの数値 User Name フィールドを補完するのに役立ちます。
DISCOURSE_SAML_ATTRIBUTE_STATEMENTS: "name:fullName"
DISCOURSE_SAML_AUTO_CREATE_ACCOUNT: true
...
この機能をテストしたところ、ログに以下のエラーが表示されました:
Completed 500 Internal Server Error in 175ms (ActiveRecord: 0.0ms)
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column "uid" violates not-null constraint
DETAIL: Failing row contains (2, 3, null, saml, user@company.com, Smith, John, 2019-06-03 21:40:55.44066, 2019-06-03 21:40:55.44066).
: INSERT INTO "oauth2_user_infos" ("user_id", "provider", "email", "name", "created_at", "updated_at") VALUES (3, 'saml', 'user@company.com', 'Smith, John', '2019-06-03 21:40:55.440660', '2019-06-03 21:40:55.440660') RETURNING "id")
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:69:in `async_exec_params'
Failed to handle exception in exception app middleware : PG::NotNullViolation: ERROR: null value in column "uid" violates not-null constraint
DETAIL: Failing row contains (2, 3, null, saml, user@company.com, Smith, John, 2019-06-03 21:40:55.44066, 2019-06-03 21:40:55.44066).
: INSERT INTO "oauth2_user_infos" ("user_id", "provider", "email", "name", "created_at", "updated_at") VALUES (3, 'saml','user@company.com', 'Smith, John', '2019-06-03 21:40:55.440660', '2019-06-03 21:40:55.440660') RETURNING "id"
SAML アサートのいずれかの属性を通じて “uid” を強制的に設定するようプラグインを構成する必要があるかどうか、ご存知でしょうか?
DISCOURSE_SAML_AUTO_CREATE_ACCOUNT が false に設定されている場合、または存在しない場合、SAML ベースの認証は機能しますが、ユーザーはメールアドレス、ユーザー名、名前を変更できるダイアログが表示されます。
