1

私の Drupal モジュールでは、ユーザーがパスワードを変更する場所をフックしようとしています。他の何かのためにこれをクリアテキストで必要とします。

だから私は基本的なことをして使用しtcauth_user_presave()ました。次に、ログ機能をトリガーするパスワードを変更しました。ただし、ログを確認したところ、提供された&$edit$account、および$category変数にはクリアテキストの新しいパスワードが含まれていませんでした。利用可能だったのは、古いパスワード (平文) とハッシュ化された新しいパスワードだけでした。

誰かが変更したときに平文のパスワードを取得する方法はありますか? それが重要な場合、これは Drupal 7 です。

4

4 に答える 4

2

presave フックが呼び出される前に、パスワードはus​​er_save()でハッシュされます。

ただし、フォームを変更する以外に別のオプションがあるようです。user_profile_form_submit()user_save()が呼び出される前に、 entity_form_submit_build_entity() ヘルパー関数を介して hook_field_attach_submit() が呼び出されます。これはフィールド フックですが、完全なユーザー オブジェクトを $entity として受け取ります。

ユーザーだけでなく、すべてのエンティティの変更に対してフックが呼び出されるため、フォームを変更するよりも本当に良いかどうかはわかりません。

于 2011-01-21T08:52:39.513 に答える
1

それをキャッチするのに最適な場所かどうかはわかりませんが、プレーン テキスト入力は hook_form_alter 内で利用できます。

function testing_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id = 'user_profile_form') {
    dpm($form_state['input']['pass']['pass1']);
  }
}

更新:私はもう少し掘り下げました。私がそれに取り組む方法は、user_profile_form_submit の前に配列に追加することを確認して、別の送信ハンドラーを user_profile_form に追加することだと思います。user_profile_form_submit によってエンコードされる前に、パスワードに完全にアクセスできます。詳細が必要な場合は、コメントを投稿してください。

于 2011-01-21T07:52:07.207 に答える
0

これを試してみてくださいhook_user_update()

$_POST['pass']['pass2']
于 2011-12-20T08:59:55.013 に答える
0

これは私の例です。私の場合、新しいパスワードを読むと役に立ちます。

/**
 * Implement hook_field_attach_submit().
 */
function yourmodulename_field_attach_submit($entity_type, $entity, $form, &$form_state) {
  if ($entity_type == 'user') {
    // deal with $form["#user"]->pass;
  }
}
于 2011-09-29T07:03:26.280 に答える