web-dev-qa-db-ja.com

匿名ユーザーフォームの送信

基本的な登録を行った後、ユーザーが小さなフォームに入力する必要があるページにリダイレクトされる状況があります。

私はhook_user_insert()hook_menu()を実装して、このようなことをすることを目指しています

_function registration_user_insert(&$edit, $account, $category){
  drupal_goto('splan/'.$edit['uid']);
}

function registration_menu() {
  $items['splan/%'] = array(
    'title' => 'Select a Plan',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('selectplan_form'),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK
  );

  return $items;
}
_

selectplan_form()で新しいフォームを定義し、ユーザーIDを使用して、ユーザーテーブルにデータを保存します。

基本的なユーザー登録フォームが送信され、ユーザーはsplan/uidにリダイレクトされますが、次のエラーも発生します。

このページにアクセスする権限がありません。

匿名ユーザーがWebフォームを作成および編集できるようにアクセス許可を変更しましたが、問題は解決しません。

4
ayush

このようにhook_user_insert()を実装する(内部でdrupal_goto()を呼び出す)のは間違いです。

  • あなたの後に呼び出されることを意図した他のモジュールにこのフックの他の実装がある場合、それらはまったく呼び出されません
  • なんらかの理由で、実装前にユーザーモジュールのhook_user_insert()が呼び出されない場合、ユーザーはまったく保存されません。
  • user.moduleのuser_save()関数を見ると、 'insert'フックを呼び出した後、この関数が実行していることは他にもたくさんあることがわかります。したがって、drupal_goto()を使用すると、彼らは行われません。

ただし、独自の送信関数を_user_register_form_に追加し、その関数で_$form_state['redirect']_をどこにでも設定できます(hook_form_alter()で_$form_state['redirect']_を更新することに注意してください) user_register_submit()は独自のリダイレクトを設定するため、この場合は機能しません。そのため、この後にリダイレクトを行う必要があります。したがって、独自の送信が必要です)。

1
Maciej Zgadzaj

LoginTobogganモジュールを使用して、サインアップしてそのロールに必要な権限を付与した後、ユーザーの一時的なロールを作成してみませんか?

0
Danielle