Create a "password_reset" resource for Services

Just another quick snippet to add to the Grasmash Services archive.

This will allow you to POST an email address to /your_endpoint/user/password_reset and trigger a 'Forgot Password' email to be sent to the appropriate user.

* Implements hook_services_resources().
function grasmash_services_resources() {
$definition['user']['actions']['password_reset'] = array(
'help' => 'Send forgot password email',
'callback' => 'grasmash_user_password_reset',
'access callback' => 'services_access_menu',
'args' => array(
'name' => 'email',
'optional' => FALSE,
'source' => 'data',
'type' => 'string',
'description' => 'The email address of the user whose password should be reset.',

  return $definition;

* Send a password reset email for the specified user.
function grasmash_user_password_reset($data) {

  $account = user_load_by_mail($data['email']);
  if (empty(
$account)) {
services_error(t('There is no user associated with email address @email.', array('@email' => $data['email'])), 404);

  $vars = array('%name' => $account->name, '%email' => $account->mail);
// Mail one time login URL and instructions using current language.
$mail = _user_mail_notify('password_reset', $account, $language);
  if (!empty(
$mail)) {
watchdog('grasmash', 'Password reset instructions mailed to %name at %email.', $vars);
  else {
watchdog('grasmash', 'There was an error re-sending password reset instructions mailed to %name at %email', $vars);
// Everything went right.
return TRUE;

Drupal Version Compatibility: 


It is very hard for me to understand , so please tell the steps, so that i can understand it.

Thanks for saving my time. Though i've altered this function a little (because my callback file is in another place).
But it works like a charm :)

Thanks for this post, It worked for me.

Add new comment

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.