CakePHP Auth Component Using 2 Tables

CakePHP Version 1.2.5

I would like a single user to have multiple email addresses.

I would like a single user to have a single password.

I would like users to log in using any of their multiple email addresses and their single password.

I have created a users table with an id and a password field.

I have created a user_email_addresses table with an id field a user_id field and an email_address field.

Question:

How do I modify the auth component minimally to look for the "username" in this case, "email_address", in the user_email_addresses table and the "password" in the users table?

Seems as though modifying the identify method in the auth component might do it. But I think modifying the auth component directly is a bad idea - any ideas on how to extend and still possibly modify the identify method? http://cakebaker.42dh.com/2009/09/08/extending-cakephps-core-components/ or possibly nominate a different authenticate object?

Starting line 774:

    function identify($user = null, $conditions = null) {
	if ($conditions === false) {
		$conditions = null;
	} elseif (is_array($conditions)) {
		$conditions = array_merge((array)$this->userScope, $conditions);
	} else {
		$conditions = $this->userScope;
	}
	if (empty($user)) {
		$user = $this->user();
		if (empty($user)) {
			return null;
		}
	} elseif (is_object($user) && is_a($user, 'Model')) {
		if (!$user->exists()) {
			return null;
		}
		$user = $user->read();
		$user = $user[$this->userModel];
	} elseif (is_array($user) && isset($user[$this->userModel])) {
		$user = $user[$this->userModel];
	}

	if (is_array($user) && (isset($user[$this->fields['username']]) || isset($user[$this->userModel . '.' . $this->fields['username']]))) {

		if (isset($user[$this->fields['username']]) && !empty($user[$this->fields['username']])  && !empty($user[$this->fields['password']])) {
			if (trim($user[$this->fields['username']]) == '=' || trim($user[$this->fields['password']]) == '=') {
				return false;
			}
			$find = array(
				$this->userModel.'.'.$this->fields['username'] => $user[$this->fields['username']],
				$this->userModel.'.'.$this->fields['password'] => $user[$this->fields['password']]
			);
		} elseif (isset($user[$this->userModel . '.' . $this->fields['username']]) && !empty($user[$this->userModel . '.' . $this->fields['username']])) {
			if (trim($user[$this->userModel . '.' . $this->fields['username']]) == '=' || trim($user[$this->userModel . '.' . $this->fields['password']]) == '=') {
				return false;
			}
			$find = array(
				$this->userModel.'.'.$this->fields['username'] => $user[$this->userModel . '.' . $this->fields['username']],
				$this->userModel.'.'.$this->fields['password'] => $user[$this->userModel . '.' . $this->fields['password']]
			);
		} else {
			return false;
		}
		$model =& $this->getModel();
		$data = $model->find(array_merge($find, $conditions), null, null, 0);
		if (empty($data) || empty($data[$this->userModel])) {
			return null;
		}
	} elseif (!empty($user) && is_string($user)) {
		$model =& $this->getModel();
		$data = $model->find(array_merge(array($model->escapeField() => $user), $conditions));

		if (empty($data) || empty($data[$this->userModel])) {
			return null;
		}
	}

	if (!empty($data)) {
		if (!empty($data[$this->userModel][$this->fields['password']])) {
			unset($data[$this->userModel][$this->fields['password']]);
		}
		return $data[$this->userModel];
	}
	return null;
}