メニューフックでDrupal 7モジュールを作成します。メニューフックはユーザ名とパスワードを$ _POST変数として受け入れ、user_login()という認証トラックに従ってください。
だから、基本的にあなたがで終わるだろう:あなたはDrupalの通過ルートに希望と直接データベースを照会したくない場合は
function my_module_authentication_menu_hook() {
// Note anywhere below that I put return FALSE you should return a failed auth response.
// Where there is a return TRUE you should return a successful auth response.
// The formatting of the auth response is up to you with how your Moodle call will react.
if (!isset($_POST['username']) || !isset($_POST['password'])) {
return FALSE;
}
$username = $_POST['username'];
$password = $_POST['password'];
// Functionality from user_login_name_validate().
if (user_is_blocked($username)) {
return FALSE;
}
// Functionality from user_login_authenticate_validate().
// You should add flood handling in here as well, but it can not be IP based, unless you
// supply the IP of the user through your Moodle functionality.
if (user_authenticate($username, $password) === FALSE) {
return FALSE;
}
// See user_login_final_validate() and implement failed login functionality before success.
return TRUE;
}
私は良心にお勧めすることはできません別のオプションは、です。 user_check_password()のコードを_password_crypt()、_password_get_count_log2()、_password_base64_encode()などのコードと一緒に再現する必要があります。また、ユーザーがブロックされているかどうかを確認する機能を再現する必要があります。ユーザーがuser_login_default_validators()機能の再現でログインできることを確認する必要もあります。その後、Drupalコアでそのコードが更新された場合は、再度更新する必要があります。メンテナンス上の理由から、Drupal経由でのルーティングをお勧めします。
メモとして、これはシングルサインオンと同じではない共有サインオンを実行します。あなたの投稿はシングルサインオンでタグ付けされましたが、あなたの質問は共有サインオンに関するものでした。 本当のシングルサインオンを実現したい場合は、共有クッキー、セッションタイムアウトの設定、環境に非常に特有のその他の複雑な負荷の設定など、より多くのことが必要になります。 –