Email authentication
OBJECTIVES
Integrate email confirmation to authenticate mobile app users.
PREREQUISITES
The 4D Mobile App Server component allowing email authentication is integrated in 4D mono and 4D server 18R4.
Let your customers and clients feel comfortable logging into their app, through email authentication!
It provides a way to verify that an email comes from whom it claims to be from, and will allow to block harmful or fraudulent uses of emails.
In short, the principle is the following:
1. Activate the login form
You integrate a login form from the project editor, in the Publishing section.
2. Enter your email address
An email is required when the app is launched. When a user enters their email and clicks on the Login button, the On Mobile app Authentication is called and the user's session status should be updated to a "pending" status. A validation email is then sent to the user.
3. Check your mailbox
When the validation email is available, the user only needs to click on the validation link. This will call the On Web Connection database method and update the user's session status from "pending" to "accepted".
4. Go back to your app
Once the validation is done, the user can reopen their app and click on the Login button. The On Mobile App Authentication is called again but this time, the user's session status is "accepted", so the access is granted!
That’s quite simple, right?
So, to make the validation process easier and secure, 4D for iOS handles the following process:
Now let's figure out how this works, using our special component!
Using the component
A component to deal with email authentication
Our 4D Mobile App Server Component has been developed to help you manage several processes.
Let's check how you can use it!
On Mobile App Authentification
Call the Mobile App Email Checker method in the On Mobile App Authentification database method with the information provided by the mobile application:
C_OBJECT($0)
C_OBJECT($1)
$0:= Mobile App Email Checker ($1)
Mobile App Active Session
Call the Activate sessions method in the On Web Connection database method with the Session ID parameter retrieved from the URL:
C_TEXT($1)
Case of
: (Mobile App Active Session($1).success)
//add log if you want
End case
It couldn't be any easier! You will find more information about this component in the documentation, especially about the resources you may use, such as html templates and settings that you may want to define.
Without the component
Here is a basic example with no use of the component.
To do so, enter the following code:
On Mobile App Authentication
C_OBJECT($0;$1;$response;$request;$email;$status)
// parameters settings come from the mobile app
$request:=$1
// Create an email with an activation URL
$mail:=New object
$mail.from:="myapplication@gmail.com"
$mail.to:=$request.email // email entered by the user on their smartphone
$mail.subject:="Login confirmation"
$mail.htmlBody:="<a href=\"https://myserverapplication/activation/"+$request.session.id \
+"\">Click Here to confirm your email.</a>\"<br>"
// Send mail
$smtp:=New object("host";"smtp.gmail.com";"user";"myapplication@gmail.com";"password";"xxx")
$transporter:=SMTP New transporter($smtp)
$status:=$transporter.send($mail)
// Configure response for 4D for iOS
$response:=New object
// Declare that the current session is being verified
$response.verify:=True
// Check if the email was successsfully sent
If ($status.success)
//create a share object to contain our sessions, accessible from all processes
If (Storage.pendingSessions=Null)
Use (Storage)
Storage.pendingSessions:=New shared object
End use
End if
Use (Storage.pendingSessions)
//Add a session to our session lists
Storage.pendingSessions[$request.session.id]:=$request.team.id+"."+$request.application.id
End use
$response.success:=True
$response.statusText:="Please check your mail box"
Else
// Display an error message on the smatphone
$response.statusText:="The mail is not sent please try again later"
$response.success:=False
End if
$0:=$response
On Web connection
This method will allow you to activate the session after clicking on the link in the confirmation email.
C_TEXT($1;$2;$3;$4;$5;$6)
C_TEXT($token;$session)
C_OBJECT($sessionFile;$sessionObject)
If ($1="/activation/@")
$token:=Substring($1;13)
End if
//get session from ID received from URL
If (Storage.pendingSessions#Null)
$session:=Storage.pendingSessions[$token]
End if
If ($session#"")
//get session folder
$sessionFile:=Folder(fk mobileApps folder).folder($session).file($token)
$sessionObject:=JSON Parse($sessionFile.getText())
//update status value
$sessionObject.status:="accepted"
$sessionFile.setText(JSON Stringify($sessionObject))
Use (Storage.pendingSessions)
//delete pending session
OB REMOVE(Storage.pendingSessions;$token)
End use
/*
The MOBILE APP REFRESH SESSIONS command checks all mobile
application session files located in the MobileApps folder of the server,
and updates existing session contents in memory for any edited files.
*/
MOBILE APP REFRESH SESSIONS
WEB SEND TEXT("You are successfully authenticated")
Else
WEB SEND TEXT("Invalid session")
End if
And that's it!
Where to go from here?
We've covered the basic email validation steps in this tutorial. You should now be able to easily access your 4D for iOS app!