2016-04-18 22 views
0

My Drupalサイトでは、ユーザー名とパスワードのデータを共有することにより、外部サービスとのシングルサインオンが可能になります。ユーザーが新規の場合は、ユーザー名とパスワードを使用して外部サービスに新しいアカウントを作成します。 問題は、外部サービスがユーザー名のスペースに満足していないことです。作成時にプログラムでDrupalユーザー名を変更する

私は、アカウントが作成されているユーザー名からスペースを削除するにはDrupalのモジュールに次のコードを書いた:

function mymodule_user_insert(&$edit, $account, $category){ 
    if($account->is_new){ 
     $name = str_replace(' ', '_', $account->name); 
     drupal_set_message("CHANGING {$account->name} TO {$name}"); 
     $account->name = $name; 
    } 
} 

アカウントが作成されると、私は次のようなデフォルトの確認メッセージが表示されます。

test_test1の新しいユーザーアカウントを作成しました。電子メールは送信されていません。私の文字列置換が効果を取っているが、私は、ユーザーアカウントを表示するとき、それはまだスペースが含ま確認

誰かが間違っていると間違っていると指摘してもらえますか?

+0

あなたはDrupalサイトでこれを頼む必要があります。 – rrirower

答えて

0

私はそれを動作させるためにhook_user_presave()を使用しました。これはuser hooksを参照してください。当時、hook_user_insert()と呼ばれ、ユーザーは既に作成されています。

私はhook_user_presave()を使用しました。これは、ユーザーアカウントを作成または更新しようとしているときに呼び出されるためです。私は$account->is_newを使って、新しいアカウントでのみタスクを実行しました。 user_save()$accountに保存するために第2引数(配列)を取るため、$accountの代わりに$editを直接編集しました。

function mymodule_user_presave(&$edit, $account, $category) { 
    if(isset($account->is_new) && $account->is_new === TRUE) { 
    $name = str_replace(' ', '_', $edit['name']); 
    // Also consider trimming the length and to lowercase your username. 
    drupal_set_message("CHANGING {$edit['name']} TO {$name}"); 
    $edit['name'] = $name; 
    } 
} 

enter image description here

+0

ありがとうございましたが、私はそのフックを試して、それは私に望ましい効果を与えることに失敗しました – sisko

+0

よく私はこのフックが動作することを確認しました。スクリーンショットで答えを更新する。 –

+0

あなたは 'account'オブジェクトの代わりに' edit'配列を使いましたか? –

関連する問題