Event called after a user has been authenticated. Use this method to retrieve values from Session() and store to process properties.
The following example demonstrates in a Process class:
FUNCTION OnAuthenticated()
*** Read custom Process Properties
this.cAuthenticatedUserName = Session.GetSessionVar("AuthenticatedUsername")
this.nAuthenticatedUserPk = VAL(Session.GetSessionVar("AuthenticatedUserPk"))
*** You could also load up the user object so it's always available
*this.oUserSecurity.Load(this.nAuthenticatedUserPk)
*this.oAuthenticatedUser = this.oUserSecurity.oUser
ENDFUNC
Typically you'll use this method in combination with wwProcess::OnAuthenticateUser() to implement custom authentication.
o.OnAuthenticated()
Example
The following demonstrates the full process of authentication
*********************************************************************
* Function ttprocess :: OnProcessInit
************************************
FUNCTION OnProcessInit
LOCAL lcScriptName, llForceLogin
THIS.InitSession("ttw")
lcScriptName = LOWER(JUSTFNAME(Request.GetPhysicalPath()))
llIgnoreLoginRequest = INLIST(lcScriptName,"default","login")
IF !THIS.Authenticate("any","",llIgnoreLoginRequest)
IF !llIgnoreLoginRequest
RETURN .F.
ENDIF
ENDIF
Response.Encoding = "UTF8"
Request.lUtf8Encoding = .T.
RETURN .T.
ENDFUNC
************************************************************************
* Login
****************************************
*** Function: Handles display of the login form if directly accessed
*** and routes postbacks to the Authenticate() method.
*** Assume:
*** Pass:
*** Return:
************************************************************************
FUNCTION Login()
pcErrorMessage = ""
IF Request.IsPostback()
pcUsername = Request.Form("WebLogin_txtUsername")
IF this.Authenticate("ANY",@pcErrorMessage)
Response.Redirect("~/default.ttk")
ENDIF
ENDIF
Response.ExpandScript(Config.cHtmlPagePath + "views\common\login.wcs")
ENDFUNC
* Login
************************************************************************
* Logout
****************************************
*** Function: Just a routing mechanism to allow logging out.
*** Assume:
*** Pass:
*** Return:
************************************************************************
FUNCTION Logout()
this.Authenticate("Logout")
Response.Redirect("default.ttk")
ENDFUNC
* Logout
************************************************************************
* OnShowAuthenticationForm
****************************************
*** Function: Show the authentication form. In this case it's simply
*** showing the application template.
*** Assume:
*** Pass:
*** Return:
************************************************************************
FUNCTION OnShowAuthenticationForm(lcUsername, lcErrorMsg)
pcUsername = lcUsername
pcPassword = ""
pcRedirectUrl = ""
pcErrorMessage = lcErrorMsg
IF EMPTY(pcUsername)
pcUserName = ""
ENDIF
Response.ExpandScript(Config.cHtmlPagePath + "views\common\login.wcs")
ENDFUNC
* OnShowAuthenticationForm
************************************************************************
* OnAuthenticated
****************************************
*** Function: Called after a user has authenticated so we can read
*** values out of the session.
*** Assume:
*** Pass:
*** Return:
************************************************************************
FUNCTION OnAuthenticated()
*** Read custom Process Properties from Session which should be
*** there since they were created when user originally signed in
this.cAuthenticatedUserName = Session.GetSessionVar("AuthenticatedUserName")
this.nAuthenticatedUserPk = VAL(Session.GetSessionVar("AuthenticatedUserPk"))
RETURN .T.
ENDFUNC
* OnAuthenticated
************************************************************************
* OnAuthenticateUser
****************************************
*** Function: Handles validating username and password for the user
*** Assume:
*** Pass:
*** Return:
************************************************************************
FUNCTION OnAuthenticateUser(lcUsername, lcPassword, lcErrorMsg)
LOCAL loUser
loUser = CREATEOBJECT("ttUser")
*** This is not actually derived from user security but basic structure
*** is similar. Save/Load methods.
THIS.oUserSecurity = loUser
IF !loUser.AuthenticateAndLoad(lcUserName, lcPassword)
this.cAuthenticatedUser = ""
this.cAuthenticatedUserName = ""
this.nAuthenticatedUserPk = -1
lcErrorMsg = this.oUserSecurity.cErrorMsg
RETURN .F.
ENDIF
*** Assign our own variables we use in the application
this.cAuthenticatedUserName = loUser.oData.UserName
this.nAuthenticatedUserPk = loUser.oData.Pk
*** Assign Session vars so we can read them back in OnAuthenticated()
Session.SetSessionVar("AuthenticatedUserName",this.cAuthenticatedUserName)
Session.SetSessionVar("AuthenticatedUserPk", this.nAuthenticatedUserPk)
RETURN .T.
ENDFUNC
* OnAuthenticateUser
See also:
Class wwProcess | Custom Authentication with UserSecurity (Example) | UserSecurity Authentication© West Wind Technologies, 1996-2024 • Updated: 01/01/16
Comment or report problem with topic