I have tried all of your suggestions Ralph,
It seems that the Exception is being thrown around line 413 of the
Auth/Adapters/DbTable.php file. It tries to authenticate my query and
seems to fail. I added a debugging statement just before the
$resultIdentities = line and this is the query that is generated and
tested.
SELECT `isp_partners_view`.*, (CASE WHEN `password` = '*****' THEN 1
ELSE 0 END) AS `zend_auth_credential_match` FROM `isp_partners_view`
WHERE (`username` = '*****')
I am not sure why the query seems to fail when running through the
$this->_zendDb->fetchAll($dbSelect) as it executes just fine on the
command line.
I am also wondering what type of performance hit I am taking by
letting it validate my query, isn't that esentially running the query
twice? Once to authenticate the query and then once to fetch the data?
Thanks,
Joseph Crawford
On Jul 6, 2009, at 11:42 PM, Ralph Schindler wrote:
Ok, a few notes:
* your _initAuth() boostrapper should probably be more concerened
with createing a Zend_Auth instance instead of a
Zend_Auth_Adapter_DbTable.
The reason being is that the Adapter_DbTable is only needed during
the AuthController::identifyAction(), its never really needed
outside of that. Zend_Auth instance on the other hand, is.
* before $result = $auth->authenticate( $authAdapter );, try calling
this: echo $auth->getDbSelect(); It will give you a good sense for
the
query being generated (minus the CASE PART described in the
protected method _authenticateCreateSelect).
In general, Adapter_DbTable should not care that you are querying
against a view. Your view should have both the identity (username)
and credential (password) available in it.
Do you get an error code from the query statement? YOu can find this
by examining the contents of the Exception thrown inside
_authenticateQuerySelect(Zend_Db_Select $dbSelect) where the
original exception is thrown.
Hope this helps,
Ralph
Joseph Crawford wrote:
Sorry I failed to show my code, here is the bootstrap method along
with my AuthController http://pastebin.com/f5d37bef4
Thanks,
Joseph Crawford
On Jul 6, 2009, at 4:59 PM, Joseph Crawford wrote:
Hello Everyone,
I had my authentication adapter working just fine using the actual
database table of isp_partners_aux. I needed to join it with
isp_partners though so that I could have the joined data in the
users identity.
I created a view in Mysql and it works find under the mysql
command line client.
I seem to get this error when using it with the Auth Adapter though.
*Message:* The supplied parameters to Zend_Auth_Adapter_DbTable
failed to produce a valid sql statement, please check table and
column names for validity.
I did some debugging by adding echo $dbSelect->__toString(); on
line 306 of Auth/Adapter/DbTable.php and got shown the following
query with the username and password marked with ** only for
security in the email.
SELECT `isp_partners_view`.*, (CASE WHEN `password` = '*****' THEN
1 ELSE 0 END) AS `zend_auth_credential_match` FROM
`isp_partners_view` WHERE (`username` = '*****')
This query works fine in the mysql command line client so I am not
sure why it is not working well when used with
Zend_Auth_Adapter_DbTable
Has anyone else here successfully used the auth adapter with an
MySQL view?
Thanks,
Joseph Crawford