为 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