Hey all,

I'm using Symfony 1.2 and Doctrine, with the sfDoctrineGuard plugin.
I have a table for profile information called sfDoctrineGuardProfile.
Creating a new user and profile works great.

I want the user to be able to log in with their email address, instead
of a username.  I set the username field in the sfDoctrineGuard schema
to allow null values.  I found an email signin validation script here
(http://bluehorn.co.nz/2009/04/29/implementing-email-login-with-
sfguardplugin/) and modified it to work with doctrine.  The email
validation is as follows:

class sfGuardUserByEmailValidator extends sfValidator
{
public function initialize($context, $parameters = null)
{
// initialize parent
parent::initialize($context);

// set defaults
$this->getParameterHolder()->set(’username_error’, ‘Email or password
is not valid.’);
$this->getParameterHolder()->set(’password_field’, ‘password’);
$this->getParameterHolder()->set(’remember_field’, ‘remember’);

$this->getParameterHolder()->add($parameters);

return true;
}

public function execute(&$value, &$error)
{
$password_field = $this->getParameterHolder()->get(’password_field’);
$password = $this->getContext()->getRequest()->getParameter
($password_field);

$remember = false;
$remember_field = $this->getParameterHolder()->get(’remember_field’);
$remember = $this->getContext()->getRequest()->getParameter
($remember_field);

$email = $value;

$profile = sfGuardUserProfileTable::retrieveByEmail($email);
if (!$profile) return false;

$user = $profile->getsfGuardUser();

// user exists and active?
if ($user and $user->getIsActive())
{
// password is ok?
if ($user->checkPassword($password))
{
$this->getContext()->getUser()->signIn($user, $remember);

return true;
}
}

$error = $this->getParameterHolder()->get(’username_error’);

return false;
}
}

How do I make sfGuardAuth use this validator instead of the default
one?  I tried, per the blog post, creating a signin.yml file with the
following values:

methods:
  post: [username, password]

names:
  username:
  required:         true
  required_msg:     Your username is required
  validators:       [userValidator]

password:
  required:         true
  required_msg:     Your password is required

userValidator:
  class:            sfGuardUserByEmailValidator
  param:
    password_field: password
    remember_field: remember

Placed that in apps/frontend/modules/sfGuardAuth/validate/signin.yml
and it doesn't seem to be working.  I'm still getting username/
password errors, instead of email/password errors.

Basically, how do I override the standard sfGuardAuth validator and
substitute this one?

Thanks so much!

Justin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to