Authentication services for ColdBox Applications.
- Lucee 5+
- Adobe ColdFusion 2018+
Requires ColdBox 4.3 for module parent settings.
box install cbauth
Specify a userServiceClass
in your config/ColdBox.cfc
inside moduleSettings.cbauth.userServiceClass
. This component needs to have three methods:
isValidCredentials( username, password )
retrieveUserByUsername( username )
retrieveUserById( id )
We have provided an interface to implement and can be found at
cbauth.interfaces.IUserService
.
Additionally, the user component returned by the retrieve
methods needs to respond to getId()
. We have also provided a nice interface for you to follow: cbauth.interfaces.IAuthUser
You can also specify a sessionStorage
and a requestStorage
WireBox mapping.
These will be used inside AuthenticationService
. By default, these are
SessionStorage@cbstorages
and RequestStorage@cbstorages
respectively.
Interfaces are provided in the models
folder for reference when building
your own. (Your storage classes do not need to formally implement the interface.)
You can inject the authenticationService
using WireBox.
property name="auth" inject="authenticationService@cbauth";
// OR
var auth = wirebox.getInstance( "authenticationService@cbauth" );
Or, the quick way, using the auth()
helper.
auth() == wirebox.getInstance( "authenticationService@cbauth" );
This is very useful in views. And since WireBox handles singleton management, you don't need to worry about calling auth()
too many times.
name | type | required | default | description |
---|---|---|---|---|
user | any | true | The user component to log in. The component must respond to the getId() method. |
Logs a user in to the system. The user component must respond to the getId()
method. Additionally, the user is cached in the request
scope. If a user is already in the session, this will replace it with the given user.
This method returns the passed in user
object.
name | type | required | default | description |
---|---|---|---|---|
quiet | boolean | false | false | Skips firing interception events if true |
Logs a user out of system. This method can be called regardless of if there is currently a logged in user.
This method fires two interception events: preLogout
and postLogout
. The preLogout
event recieves the currently logged-in user, if there is one.
name | type | required | default | description |
---|---|---|---|---|
No arguments |
Logs a user out of system without firing interception events. Useful in testing situations where the "logged in" user may no longer exist in your database.
name | type | required | default | description |
---|---|---|---|---|
username | string | true | The username to attempt to log in. | |
password | string | true | The password to attempt to log in. |
Attempts to log a user by calling the isValidCredentials
and retrieveUserByUsername
on the provided userServiceClass
. If isValidCredentials
returns false
, it throws a InvalidCredentials
exception.
If it succeeds, it returns the logged in user
object. If it succeeds, it also sets the user id (obtained by calling getId()
on the returned user component) in the session and the returned user component in the request.
name | type | required | default | description |
---|---|---|---|---|
No arguments |
Returns whether a user is logged in to the system.
name | type | required | default | description |
---|---|---|---|---|
No arguments |
Alias for isLoggedIn
name | type | required | default | description |
---|---|---|---|---|
No arguments |
Returns whether a user is logged out of the system.
name | type | required | default | description |
---|---|---|---|---|
No arguments |
Returns the currently logged in user component.
If there is no logged in user, it throws a NoUserLoggedIn
exception.
Additionally, it sets the user in the request
scope so subsequent calls to getUser
don't re-fetch the user from the database or other permanent storage.
name | type | required | default | description |
---|---|---|---|---|
No arguments |
Alias for getUser
name | type | required | default | description |
---|---|---|---|---|
No arguments |
Returns the currently logged in user id.
If there is no logged in user, it throws a NoUserLoggedIn
exception.
cbauth announces several custom interception points. You can use these interception points to change request data or add additional values to session or request scopes. The preAuthentication
and postAuthentication
events fire during the standard authenticate()
method call with a username and password. The preLogin
and postLogin
events fire during the login()
method call. The preLogout
and postLogout
events fire during the logout()
method call.
Note: the preLogin
and postLogin
interception points will be called during the course of authenticate()
. The order of the calls then are preAuthentication
-> preLogin
-> postLogin
-> postAuthentication
.
interceptData
name | description |
---|---|
username | The username passed in to cbauth . |
password | The password passed in to cbauth . |
Modifying the values in the interceptData
will change what is passed to isValidCredentials
and retrieveUserByUsername
. This is the prime time to ignore certain requests or remove or pad usernames.
interceptData
name | description |
---|---|
user | The user component to be logged in. |
sessionStorage | The sessionStorage object to store additional values if needed. |
requestStorage | The requestStorage object to store additional values if needed. |
This is the prime time to store additional values based on the user returned.
interceptData
name | description |
---|---|
user | The user component to be logged in. |
interceptData
name | description |
---|---|
user | The user component to be logged in. |
sessionStorage | The sessionStorage object to store additional values if needed. |
requestStorage | The requestStorage object to store additional values if needed. |
This is a good opportunity to store additional data if your application logged the user in manually without authenticating via a username/password like a "remember me" system.
interceptData
name | description |
---|---|
user | The user component that is logged in if you are logged in, else null |
interceptData
name | description |
---|