为 Drupal 6 密码恢复电子邮件添加重置密码支持

Drupal 能够根据不同的操作向用户发送一些不同的电子邮件。通过使用一组令牌,可以使用用户名、密码、电子邮件地址和其他内容很好地自定义电子邮件。密码恢复电子邮件指出,您可以使用“!password”令牌向用户发送他们的新密码,但经过几次测试后,我发现发送电子邮件时该令牌不会被替换。

这里最简单的解决方案就是从这封电子邮件的描述中删除这个令牌。但是,如果您确实希望允许用户使用此表单重置(和接收)他们的密码,那么您可以执行一些简单的操作。

首先要做的是更改 user_pass 表单,以便它使用我们将编写的自定义提交函数。将以下表单挂钩添加到模块(或为此目的创建自己的)。

/**

 * Implements hook_form_form-id_alter().

 *

 * Overwrite the submit function of the request new password form.

 */

function mymodule_form_user_pass_alter(&$form, &$form_state) {

  $form['#submit'] = array('mymodule_user_pass_submit');

}

下一步是重写user_pass_submit()提交函数的代码,但要创建一个保存用户密码。我们需要做的就是调用user_password()以创建密码,使用 将其保存到用户的帐户user_save(),然后确保将其传递到电子邮件模板。

/**

 * Overrides the submit function user_pass_submit().

 *

 * @see mymodule_form_user_pass_alter()

 */

function mymodule_user_pass_submit($form, &$form_state) {

  global $language;

 

  $account = $form_state['values']['account'];

 

  // 生成新密码

  $password = user_password();

 

  // 保存新密码

  $savedetails = array('pass' => $password);

  user_save($account, $savedetails);

 

  // 设置 $account 对象的密码参数,以便通过电子邮件发送新密码。

  $account->password = $password;

 

  // 继续提交功能的其余部分

 

  // 使用当前语言发送一次性登录 URL 和说明。

  _user_mail_notify('password_reset', $account, $language);

  watchdog('user', 'Password reset instructions mailed to %name at %email.', array('%name' => $account->name, '%email' => $account->mail));

  drupal_set_message(t('Further instructions have been sent to your e-mail address.'));

 

  $form_state['redirect'] = 'user';

  return;

}

现在,当您的用户请求新密码时,当前密码将被更改并通过电子邮件发送给他们。

以上是 为 Drupal 6 密码恢复电子邮件添加重置密码支持 的全部内容, 来源链接: utcz.com/z/360849.html

回到顶部