2012-03-14 6 views
0

すべてのユーザーは私のdrupal 7ユーザーテーブルに格納されています。Drupal 7シングルサインオン(Moodle、wikiなど)

また、WikiやMoodleのような外部サイトもあります。

私は、Drupal-6とMoodleでシングルサインオンを使用しました。 Moodleは他のシステムからのユーザをサポートしています。

私がDrupal 7の関数user_hash_passwordを使ってMoodleのパスワードをハッシュしたときのパスワードは同じではありません。毎回新しいハッシュがあります。

私はDrupal 7のユーザーテーブルのパスワードで何かする必要がありますか?

答えて

0

メニューフックで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経由でのルーティングをお勧めします。

+0

メモとして、これはシングルサインオンと同じではない共有サインオンを実行します。あなたの投稿はシングルサインオンでタグ付けされましたが、あなたの質問は共有サインオンに関するものでした。 本当のシングルサインオンを実現したい場合は、共有クッキー、セッションタイムアウトの設定、環境に非常に特有のその他の複雑な負荷の設定など、より多くのことが必要になります。 –

0

CASモジュールなどのモジュールを使用して、パスワード入力を単一のサイトに駆動することを検討することがあります。 MoodleといくつかのWikiがこのIIRCをサポートしています。通常の戦略を使用して、他のフィールドを製品間で同期させます。