外部サイト(サードパーティ、ミドルウェアのみ作成)から既存の全ユーザーをインポートする関数を作成しようとしています。createUser 関数を使用しようとしていますが、external_ids パラメータを除いて正常に動作します。配列やオブジェクトなど、どのような値を送信しても、外部 ID は保存されず、ユーザーは作成されます。エラーはありません。
external_ids オブジェクトには特定のフォーマットがありますか?
sso_sync ソリューションを見ましたが、特に external_ids パラメータが API に含まれているため、その方法をとることは避けたいです。
何かヒントはありますか?よろしくお願いします。
こんにちは、ようこそ:wave:
これについて具体的に答えるには、期待される形式は次のようになると考えられます。
{ <provider_name>: <unique_id> }
「いいね!」 1
ありがとうございます。そして、ようこそ!
お送りいただいたフォーマットを試しましたが、リクエストは通過しましたが、外部IDはまだ保存されていません "external_ids": {},
使用しているコードのサンプルを以下に示します(nodejs)
const create = await connection.post('/users.json', {
name: `${req.body.first_name} ${req.body.last_name}`,
email: req.body.email,
password: test_password,
username: `${req.body.first_name}_${req.body.last_name}`,
external_ids: JSON.stringify({ 'magento': req.body.user_id }),
事前に定義する必要があるものはありますか、または何か間違っている点はありますか?
pmusaraj
(Penar Musaraj)
2023 年 11 月 22 日午後 4:53
4
認証子は正しく設定されていますか?関連するコードは次のとおりだと思います。
if field_val.blank?
return fail_with("login.missing_user_field") if f.required?
else
fields["#{User::USER_FIELD_PREFIX}#{f.id}"] = field_val[0...UserField.max_length]
end
end
user.custom_fields = fields
end
# Handle associated accounts
associations = []
if params[:external_ids].is_a?(ActionController::Parameters) && current_user&.admin? && is_api?
params[:external_ids].each do |provider_name, provider_uid|
authenticator = Discourse.enabled_authenticators.find { |a| a.name == provider_name }
SSOはすでに設定済みで、サードパーティサイトからDiscourseへのリダイレクトも可能でしたが、discourse connect provider secretsを定義する際にプロバイダーを定義する場所以外に、どこで定義したか思い出せません。何か見落としていることはありますか?
pmusaraj
(Penar Musaraj)
2023 年 11 月 22 日午後 5:09
6
うーん、わかりました。DiscourseConnect を使用している場合、コードを読むと、作成時に外部 ID を追加できないようです。上記のコードは、SSO とは異なる関連アカウントのみを処理します。
2 回呼び出しを試すことができます。まず、現在と同じように呼び出しますが、外部 ID は含めず、次に updateUser を呼び出して、外部 ID 情報を含めます。これでうまくいくといいのですが。
「いいね!」 1
ご協力ありがとうございます。はい、DiscourseConnectを使用しているため、おそらくこれが機能しない理由です。これが最終的に行う必要があるアプローチだと思います。それ以外の場合は、SSOログインが外部IDを使用してユーザーをログインさせ、メールにリンクするように2番目の呼び出しを行う必要があります。
編集:updateUserも、プロバイダーが定義されていないため、同じ問題を抱えていると思います。したがって、SSOログインが最善の策である可能性が高いです。
アップデートとこの件の締めくくりとして、唯一機能した解決策は、新しいユーザーを作成した後に sso_sync を実行することでした。しかし、ユーザーがディスコースにSSOでログインしようとすると、メール経由で同期が行われるため、それほど必要でもありませんでした。\n協力してくれたすべての人に感謝します。
「いいね!」 2
system
(system)
クローズされました:
2023 年 12 月 29 日午後 1:57
9
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.