Drupal:別のWebAppと通信するためのユーザー登録ワークフローのカスタマイズ
-
22-09-2019 - |
質問
私はDrupal6を初めて使用しており、成功せずに次の機能を実装する方法を検索するのに長い時間を費やしました。DrupalをWebアプリのフロントエンド/Docボードとして使用しています。このWebアプリのすべてのユーザーアカウントの作成、更新、削除をミラーリングしたい場合は、ユーザー名とパスワードを送信します。
小さなモジュールの実装のコーディングを開始しました hook_user
(http://api.drupal.org/api/function/hook_user/6)、しかし、私はまだこのフックに関するいくつかの質問について疑問に思っています:
1)それに関するドキュメントが見つかりません $account
フィールド、したがって、ユーザー名とパスワードを取得する方法がわかりません。
2) insert
操作は、「ユーザーアカウントが追加されている」ことを通知します。ユーザーがアカウントを照会したとき、または保留中のアカウント作成が承認されたときにトリガーされますか?
3)「スレーブ」WebAppのユーザー管理は、URLインターフェイスを介して行われます。私はそれを知っています header("Location: http://webapp/users/add?user=martin&pwd=bla")
PHPプリミティブですが、ターゲットページにヒットしてコードフローを継続するのではなく、これがリダイレクトを作るのではないかと心配しています。なにか提案を?
たぶん、あなたの何人かはすでにそのようなモジュールをプログラムしているのでしょうか、それともより多くのドキュメントのためのリンクを持っているでしょうか?
前もって感謝します、
マーティン
解決 4
これが機能する最終的なコードです。パスワードがmd5ifiedを取得しているため、スレーブWebAppも同様にできる必要があることに注意してください。
function mirror_registration_user($op, &$edit, &$account, $category = NULL) {
$cmd = 'http://www.example.com/register?name='.$account->name.'&pass='.$account->pass;
if($op == 'insert'){
$cmd .= '&op=insert';
drupal_http_request( $cmd );
}
else if($op == 'delete'){
$cmd .= '&op=delete';
drupal_http_request( $cmd );
}
else if($op == 'after_update'){ // 'update' is a "before update event"
$cmd .= '&op=update';
drupal_http_request( $cmd );
}
}
注:私たちの場合、登録には管理者の承認が必要です。この場合、「更新」イベントがあります。 「挿入」イベントは、ユーザーがアカウントを照会するとすぐにトリガーされます。
他の初心者のための情報:
他のヒント
一歩後退して全体像を見ると、いくつかの選択肢があります。
- 両方のサイトにOpenID(そのためのコアDrupalモジュールがあります)を使用してください
- LDAPを使用します(それには本当に良いDrupal Contribモジュールがあります)
- 他のモジュールを見ると、他のアプリとのユーザーログイン共有を提供します( http://drupal.org/project/phpbb また http://drupal.org/project/moodle または他の多く)インスピレーションのために
- WebアプリにDrupalのユーザーテーブルを使用してもらいます。これは比較的簡単です。ユーザー名はプレーンテキストにあり、パスワードはMD5'edだけです(したがって、塩や水域を泥だらけにするものはありません)。
基本的に、hook_userは間違っています。必要なのは、hook_form_alterを使用して、ログインフォームの「#validate」パラメーターを変更することです。そうすれば、検証はモジュールの関数に渡され、そこで$ form_values ['username']および$ form_values ['password']を取得します。あなたはそれをあなたのURLに渡します カール. 。正しく返された場合は、何も返しません。返されない場合は、form_set_errorを使用すると、ログインが拒否されます。
幸運を!
ページから応答を取得するために、使用することができます drupal_http_request()
一般的なセキュリティノートは、アプリケーション間のリクエストを認証および検証していることを確認してください。 HTTPを介してGetパラメーターを介してプレーンテキストでパスワードを渡すことも少し気分が悪くなりますが、アプリケーションがセットアップされていません。