Eric-
I have a simple authentication running with mySql.
The db-authenticator is missing from the pipeline given. form-validator is
only validating that the values in your form meet the constraints in
params.xml. db-authenticator will check the database table against what the
user typed in.
The corresponding pipeline in my sub-site is:
<map:match pattern="do-login">
<!-- first validate whether submitted values are ok -->
<map:act type="form-validator">
<map:parameter name="descriptor"
value="context://wbs/descriptors/params.xml"/>
<map:parameter name="validate" value="user_id"/>
<!-- now try to log in -->
<map:act type="db-authenticator">
<map:parameter name="descriptor"
value="context://wbs/descriptors/auth.xml"/>
<!-- now go to protected area -->
<map:redirect-to uri="protected"/>
</map:act>
</map:act>
<!-- something was wrong, try it again -->
<map:redirect-to uri="login"/>
</map:match>
(Yes, it was shamelessly stolen from the example.)
The auth.xml I use looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<auth-descriptor>
<connection>wbs</connection>
<table name="tbl_users">
<select dbcol="user_id" request-param="user_id" to-session="user_id"/>
<select dbcol="user_password" request-param="user_password"
to-session="user_password"/>
<select dbcol="user_permission" to-session="user_permission"
type="string"/>
</table>
</auth-descriptor>
An item of note: the names for the id & password MUST match in login.xsp
(request name - html form), in params.xml (name=), and auth.xml
(request-param=). The "dbcol" in auth.xml is the column name in your table -
"user_name" from your table def.
If the request name in login.xsp (from the html form) is not the same as in
params.xml (in your case "user_id") that may be why the form is not
validated - sending you back to login.
Then, assuming other pipes will be 'protected' you need to wrap each one.
Such as:
<map:match pattern="*-meter.html*">
<map:act type="session-validator">
<map:parameter name="descriptor"
value="context://wbs//descriptors/params.xml"/>
<map:parameter name="validate" value="user_id, user_password"/>
<!-- Now generate the page -->
<map:generate type="serverpages" src="docs/{../1}-meter.xsp"/>
<map:transform src="stylesheets/wbs.xsl"/>
<map:serialize/>
<!-- End generated page -->
</map:act>
<!-- something was wrong, redirect to login page -->
<map:redirect-to uri="login"/>
</map:match>
"session-validator" will validate that the user_id & user_password (placed
in session variables by "db-authenticator" from the "to-session" of
auth.xml) are valid. It only checks validity in terms of a 'form' check - it
does not access the database again (as far as I know).
These values are invalidated on session timeout, forcing the user to login
again.
Since I am still playing, I am allowing the password to stay around as a
session variable.
On your PASSWORD() function question, I can not help. My guess is that you
would have to modify (or make your own)
org.apache.cocoon.acting.FormValidatorAction.
HTH
Dave...................
----- Original Message -----
From: "Eric Dalquist" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, June 29, 2002 12:06 PM
Subject: Form Validator
> I've been trying to get the form validator and DB Validator working for
> about a week now. I decided to try and just got the form stuff working
first
> but I can't even get that. I'm running Cocoon 2.0.2-dev and Tomcat 4.1.3.
>
> In my sitemap.xmap I have the following:
>
> <!--
> | The page do_login does not actually exist this is just a dummy
> | target for the login auth to take place at.
> -->
> <map:match pattern="do_login.xsp">
> <map:act type="form-validator">
> <map:parameter name="descriptor"
> value="context://house_bills/descriptors/params.xml"/>
> <map:parameter name="validate-set" value="user-pass"/>
>
> <map:redirect-to uri="index.xsp"/>
> </map:act>
>
> <map:redirect-to uri="login.xsp"/>
> </map:match>
>
> login.xsp has a form that posts to do_login.xsp and has two inputs named
> user_name and user_password.
>
> Here is my params.xml
> <?xml version="1.0"?>
> <root>
> <parameter name="user_name" type="string" nullable="no"/>
> <parameter name="user_password" type="string" nullable="no"/>
>
> <constraint-set name="name-pass">
> <validate name="user_name"/>
> <validate name="user_password"/>
> </constraint-set>
> </root>
>
> I've checked through the logs and there aren't any context errors so
Cocoon
> seems to be finding the params.xml file OK. Everytime I submit the form I
> get bounced back to the login.xsp page instead of getting sent to
index.xsp.
> It doesn't matter if I don't put anything in the inputs or have valid data
> in both.
>
> I would also like to be able to validate the user_name & password_fields
> against a MySQL database and setting the value in the corresponding
user_id
> column in a session variable. I played with it a little and cocoon was
> connection to the DB but not authenticating, I don't have my descriptor
file
> for that any more. Here is my DDL for the table I want to auth against.
>
> CREATE TABLE `users` (
> `user_id` int(11) unsigned NOT NULL auto_increment,
> `user_name` varchar(255) NOT NULL default '',
> `user_password` varchar(16) NOT NULL default '',
> `user_first_name` varchar(255) NOT NULL default '',
> `user_last_name` varchar(255) NOT NULL default '',
> `user_email` varchar(255) NOT NULL default '',
> `user_status` tinyint(4) unsigned NOT NULL default '1',
> PRIMARY KEY (`user_id`),
> UNIQUE KEY `user_login` (`user_name`,`user_password`),
> UNIQUE KEY `user_id` (`user_id`)
> ) TYPE=MyISAM
>
> My other question with the DBAuth stuff is can cocoon run the submitted
> password through MySQLs PASSWORD() function? I would really like to be
able
> to keep the password column in the table encrypted and still be able to
use
> the DBAuth stuff.
>
> I hope someone can give me a hand with this. After a week of searching the
> mailing lists, coocon site and web in general I'm stuck!
>
> -Eric Dalquist
>
>
>
> ---------------------------------------------------------------------
> Please check that your question has not already been answered in the
> FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html>
>
> To unsubscribe, e-mail: <[EMAIL PROTECTED]>
> For additional commands, e-mail: <[EMAIL PROTECTED]>
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html>
To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>