Why not adopt me?
NAME
User::Simple - Simple user sessions management
SYNOPSIS
$usr = User::Simple->new(db => $db,
[tbl => $user_table],
[durat => $duration],
[debug => $debug]);
$ok = $usr->ck_session($session);
$ok = $usr->ck_login($login, $passwd, [$no_sess]);
$ok = $usr->set_passwd($new_pass);
$usr->end_session;
$name = $usr->name;
$login = $usr->login;
$id = $usr->id;
$session = $usr->session;
$level = $usr->level;
DESCRIPTION
User::Simple provides a very simple framework for validating users, managing their sessions and storing a minimal set of information (this is, a meaningful user login/password pair, the user's name and privilege level) via a database. The sessions can be used as identifiers for i.e. cookies on a Web system. The passwords are stored as MD5 hashes (this means, the password is never stored in clear text).
User::Simple was originally developed with a PostgreSQL database in mind, but should work with any real DBMS. Sadly, this rules out DBD::CSV, DBD::XBase, DBD::Excel and many other implementations based on SQL::Statement - The user table requires the driver to implement primary keys and NOT NULL/UNIQUE constraints.
The functionality is split into two modules, User::Simple and User::Simple::Admin. This module provides the functionality your system will need for any interaction started by the user - Authentication, session management, querying the user's data and changing the password. Any other changes (i.e., changing the user's name, login or level) should be carried out using User::Simple::Admin.
CONSTRUCTOR
In order to create a User::Simple object, call the new argument with an active DBI (database connection) object as its only argument:
$usr = User::Simple->new(db => $db, [tbl => $table], [durat => $duration],
[debug => $debug]);
Of course, the database must have the right structure in it - please check User::Simple::Admin for more information.
The tbl
parameter is the name of the table where the user information is stored. If not specified, it defaults to 'user_simple'.
durat
is the number of minutes a user's session should last. Its default is of 30 minutes.
debug
is the verbosity level of the debugging messages - The default is 2, it accepts integers between 0 and 5 (higher means more messages). Messages of high relevance (i.e. the database failing to reflect any changes we request it to make) are shown if debug is >= 1, regular failure messages are shown if debug >= 3, absolutely everything is shown if debug == 5. Be warned that when debug is set to 5, information such as cleartext passwords will be logged as well!
SESSION CREATION/DELETION
Once the object is created, we can ask it to verify that a given user is valid, either by checking against a session string or against a login/password pair::
$ok = $usr->ck_session($session);
$ok = $usr->ck_login($login, $passwd, [$no_sess]);
The optional $no_sess argument should be used if we do not want to modify the current session (or to create a new session), we want only to verify the password matches (i.e. when asking for the current password as a confirmation in order to change a user's password). It will almost always be left false.
To end a session:
$ok = $usr->end_session;
To verify whether we have successfully validated a user:
$ok = $usr->is_valid;
QUERYING THE CURRENT USER'S DATA
To check the user's attributes (name, login and ID):
$name = $usr->name;
$login = $usr->login;
$id = $usr->id;
To change the user's password:
$ok = $usr->set_passwd($new_pass);
USER LEVEL
To check for the user level (again, see User::Simple::Admin for further details):
$level = $usr->level;
DEPENDS ON
DBI (and a suitable DBD backend)
SEE ALSO
User::Simple::Admin for administrative routines
TO DO
I would like to separate a bit the table structure, allowing for flexibility - This means, if you added some extra fields to the table, provide an easy way to access them. Currently, you have to reach in from outside User::Simple, skipping the abstraction, to get them.
Although no longer documented (don't use them, please!), we still have the adm_level/is_admin functionality. For cleanness, it should be removed by the next release.
Besides that, it works as expected (that is, as I expect ;-) )
AUTHOR
Gunnar Wolf <gwolf@gwolf.org>
COPYRIGHT
Copyright 2005 Gunnar Wolf / Instituto de Investigaciones Económicas UNAM This module is Free Software, it can be redistributed under the same terms as Perl.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 148:
Non-ASCII character seen before =encoding in 'Económicas'. Assuming CP1252