Why not adopt me?
NAME
POE::Component::UserBase - a component to manage user authentication
SYNOPSIS
use POE qw(Component::UserBase);
# The UserBase can deal with many types of repositories.
# The first kind is a simple file.
POE::Component::UserBase->spawn
( Alias => 'userbase', # defaults to 'userbase'.
Protocol => 'file', # The repository type.
Cipher => 'md5', # defaults to 'crypt'.
File => '/home/jgoff/passwd', # The path to the repository
Dir => '/home/jgoff/.persist', # Directory to store persistent
# information.
);
POE::Component::UserBase->spawn
( Alias => 'userbase', # defaults to 'userbase'.
Protocol => 'dbi', # The repository type.
Cipher => 'sha1', # defaults to 'crypt'.
DBHandle => $dbh, # Required, connected to a handle.
Table => 'auth',
UserColumn => 'user_name', # defaults to 'username'.
PassColumn => 'password', # defaults to 'password'.
PersistColumn => 'persistent', # defaults to 'data'. This is our
# persistent data storage.
);
# PoCo::UserBase provides generic user-management services to multiple
# sessions.
$kernel->post
( user_base => log_on => user_name => $user_name,
domain => $domain, # optional
password => $password, # optional
persistent => $persistent_reference,
response => $authorized_state,
);
$kernel->post
( user_base => log_off => user_name => $user_name,
password => $password, # optional
);
$kernel->post
( user_base => create => user_name => $user_name,
domain => $domain, # optional
password => $password, # optional
);
$kernel->post
( user_base => delete => user_name => $user_name,
domain => $domain, # optional
password => $password, # optional
);
$kernel->post
( user_base => update => user_name => $user_name,
domain => $domain, # optional
password => $password, # optional
new_user_name => $new_name, # optional
new_domain => $new_dom, # optional
new_password => $new_pass, # optional
);
DESCRIPTION
POE::Component::UserBase handles basic user authentication and management tasks for a POE server. It can authenticate from sources such as a .htaccess file, database, DBM files, and flat files.
PoCo::UserBase communicates with the client through a previously created SocketFactory. After a client is has connected, PoCo::UserBase interrogates the client for its username and password, and returns the connection data from the socket along with the username and password authenticated.
POE::Component::UserBase's spawn method takes a few parameters to describe the depository of user names. I'd recommend that you not use any crucial system files until you assure yourself that it's indeed safe.
The spawn method has several common parameters. These are listed below.
- Alias => $session_alias
-
Aliassets the name by which the session will be known. If no alias is given, the component defaults to "userbase". The alias lets several sessions interact with the user manager without keeping (or even knowing) hard references to them. - Cipher => $cipher_type
-
Ciphersets the cipher that will be used to encrypt the password entries. If no cipher is given, the component defaults to "crypt". This uses the native crypt() function. Other cipher choices include 'md5', 'sha1', 'md5_hex', 'sha1_hex', 'md5_base64', and 'sha1_base64'. The 'md5' and 'sha1' cipher types are documented in the Digest::MD5 and Digest::SHA1 class. They're simply different output formats of the original hash.
These parameters are unique to the file Protocol type.
- File => $filename
-
Filesets the file name that is used to store user data. This parameter is required. - Dir => $path_to_persistent_directory
-
DirSets the directory that is used to hold the persistence information. This directory holds the frozen persistent data, indexed by the user_name.
These parameters are unique to the dbi Protocol type.
- Connection => $dbh_connection
-
Connectionstores a handle to a DBI connection. The database must contain a table which will hold the username, password, and persistent data. - PersistentColumn => $persistent_data_column_name
-
PersistentColumnspecifies the column name used to hold the persistent data. If you can't allocate enough space to hold your persistent data in the database, then you can use theDataFileparameter to define a MLDBM file that will be used to hold this persistent data. The MLDBM data file will be keyed by the username. - DataFile => $data_file_name
-
DataFilespecifies the filename of the MLDBM file used to hold the persistent data store. Use of this parameter is incompatible withData. - DomainColumn => $domain_column_name
-
DomainColumnspecifies the column used to store thedomaincolumn. It defaults todomain. - PasswordColumn => $password_column_name
-
PasswordColumnspecifies the column used to store thepasswordcolumn. It defaults topassword. - Table => $dbi_table
-
Tablespecifies the table name used to store username, password, and maybe the persistent data stored along with each user. - UserColumn => $user_column_name
-
UserColumnspecifies the column used to store theusernamecolumn. It defaults tousername. In the event that you use theDataFileparameter, this column will be kept in sync with the MLDBM file.
Sessions communicate asynchronously with passive UserBase components. They post their requests through several internal states, and receive data through a state that you specify.
Requests are posted to one of the states below:
- log_on
-
log_onis to be called when a client wants to authenticate a user.$kernel->post ( user_base => log_on => user_name => $user_name, domain => $domain, # optional password => $password, # optional persistent => $persistent_reference, response => $authorized_state, ); - log_off
-
log_offis to be called when a client is finished with a user.$kernel->post ( user_base => log_off => user_name => $user_name, password => $password, # optional ); - create
-
createlets you create a new user.$kernel->post ( user_base => create => user_name => $user_name, domain => $domain, # optional password => $password, # optional ); - delete
-
deletelets you delete a user.$kernel->post ( user_base => delete => user_name => $user_name, domain => $domain, # optional password => $password, # optional ); - update
-
updatelets you update a user.$kernel->post ( user_base => update => user_name => $user_name, domain => $domain, # optional password => $password, # optional new_user_name => $new_name, # optional new_domain => $new_dom, # optional new_password => $new_pass, # optional );
For example, authenticating a user is simply a matter of posting a request to the userBase alias (or whatever you named it). It posts responses back to either the 'authorization accepted' or 'authorizaton failed' state. If it successfully authenticates the user, it then fills the alias referenced in the Persistence parameter with the user data it stored in the database when the user logged out.
SEE ALSO
This component is built upon POE. Please see its source code and the documentation for its foundation modules to learn more.
Also see the test programs in the t/ directory, and the samples in the samples/ directory in the POE/Component/UserBase directory.
BUGS
None currently known.
AUTHOR & COPYRIGHTS
POE::Component::UserBase is Copyright 1999-2000 by Jeff Goff. All rights are reserved. POE::Component::UserBase is free software; you may redistribute it and/or modify it under the same terms as Perl itself.