Send Password Reset Emails by adding a new BaaS method with Parse
Recently, I covered the steps necessary to add password reset email notification functionality to your BaaS enabled Delphi XE6 app using Kinvey. Today, I thought I would explain how to do this with Parse.
This demo shows you how to to derive from the existing ParseAPI class (TExtendParseApi = class(TParseApi)) for the Parse component and add a new method for executing Parse's password reset.
Inside your Parse.com account, you can define email settings for the password reset email.

My application consists of 4 edit controls parented to 4 TListBox items:
TListBox has GroupingKind set to Grouped and StyleLookUp set to 'transparentlistboxstyle'.
I added the ParseProvider1 component to my form and entered the AppID, MasterKey and RESTAPIKey that is displayed inside my Parse.com. In order to extend the functionality, I had to add a new method for triggering a password reset email notification which you can see in the code samples below.

Shown: Mobile app running on Windows with Mobile Preview style.
Below you see a screenshot of the email that I received after clicking on the 'Reset Password via Email' button inside my app:

After clicking on the automatically generated reset URL, you see a web based form where you can reset your password:
This demo shows you how to to derive from the existing ParseAPI class (TExtendParseApi = class(TParseApi)) for the Parse component and add a new method for executing Parse's password reset.
Inside your Parse.com account, you can define email settings for the password reset email.

My application consists of 4 edit controls parented to 4 TListBox items:
- EditUsername
- EditPassword
- EditSessionToken
- EditEmail
TListBox has GroupingKind set to Grouped and StyleLookUp set to 'transparentlistboxstyle'.
I added the ParseProvider1 component to my form and entered the AppID, MasterKey and RESTAPIKey that is displayed inside my Parse.com. In order to extend the functionality, I had to add a new method for triggering a password reset email notification which you can see in the code samples below.
Shown: Mobile app running on Windows with Mobile Preview style.
Here is the code for my ExtendParseApiUnit
unit ExtendParseApiUnit;
interface
uses REST.Backend.Parseapi, System.JSON, REST.Client, REST.Types;
type
TExtendParseApi = class(TParseApi)
private
public
procedure SignupUser(const AUserName, APassword, AEmail: string;
out ALogin: TParseAPI.TLogin); overload;
procedure PasswordReset(const AEmail: string);
end;
implementation
// New version of signup user that has a password parameter
procedure TExtendParseApi.SignupUser(const AUserName, APassword, AEmail: string;
out ALogin: TParseAPI.TLogin);
var
LJSON: TJSONObject;
begin
LJSON := TJSONObject.Create;
try
LJSON.AddPair('email', AEmail);
inherited SignupUser(AUserName, APassword, LJSON, ALogin);
finally
LJSON.Free;
end;
end;
//curl -X POST \
// -H "X-Parse-Application-Id: cIj01OkQeJ8LUzFZjMnFyJQD6qx0OehYep0mMdak" \
// -H "X-Parse-REST-API-Key: yVVIeShrcZrdr3e4hMLodfnvLckWBZfTonCYlBsq" \
// -H "Content-Type: application/json" \
// -d '{"email":"This email address is being protected from spambots. You need JavaScript enabled to view it."}' \
// https://api.parse.com/1/requestPasswordReset
procedure TExtendParseApi.PasswordReset(const AEmail: string);
var
LJSON: TJSONObject;
begin
Request.ResetToDefaults;
AddAuthParameters;
Request.Method := TRESTRequestMethod.rmPOST;
Request.Resource := 'requestPasswordReset';
LJSON := TJSONObject.Create;
try
LJSON.AddPair('email', AEmail);
Request.AddBody(LJSON);
Request.Execute;
CheckForResponseError([201]);
finally
LJSON.Free;
end;
end;
end.
Here is the code for my mobile client
unit ParseFormUnit;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IPPeerClient,
REST.OpenSSL, REST.Backend.ParseProvider, FMX.StdCtrls,
FMX.Edit, ExtendParseApiUnit, FMX.ListBox, FMX.Layouts;
type
TParseForm = class(TForm)
ButtonSignup: TButton;
ButtonPasswordReset: TButton;
ListBox1: TListBox;
UserLabel: TListBoxItem;
EditUserName: TEdit;
PasswordLabel: TListBoxItem;
EditPassword: TEdit;
EmailLabel: TListBoxItem;
EditEmail: TEdit;
SessionLabel: TListBoxItem;
EditSessionToken: TEdit;
ToolBar1: TToolBar;
Label5: TLabel;
ParseProvider1: TParseProvider;
procedure ButtonSignupClick(Sender: TObject);
procedure ButtonPasswordResetClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FApi: TExtendParseAPI;
procedure ClearFields;
public
{ Public declarations }
end;
var
ParseForm: TParseForm;
implementation
{$R *.fmx}
uses REST.Backend.ParseApi, System.JSON;
procedure TParseForm.ButtonPasswordResetClick(Sender: TObject);
begin
FApi.PasswordReset(EditEmail.Text);
ShowMessage('Message sent to ' + EditEmail.Text);
end;
procedure TParseForm.ButtonSignupClick(Sender: TObject);
var
LLogin: TParseAPI.TLogin;
begin
FApi.SignupUser(EditUsername.Text, EditPassword.Text, EditEmail.Text, LLogin);
FApi.Login(LLogin); // Make subsequent calls as this user
EditSessionToken.Text := LLogin.SessionToken;
ShowMessage('Welcome ' + LLogin.User.UserName);
end;
procedure TParseForm.FormCreate(Sender: TObject);
begin
FApi := TExtendParseAPI.Create(Self);
// Assign appkey, etc.
ParseProvider1.UpdateApi(FApi);
end;
procedure TParseForm.ClearFields;
begin
EditUserName.Text := '';
EditPassword.Text := '';
EditEmail.Text := '';
EditSessionToken.Text := '';
end;
end.
Below you see a screenshot of the email that I received after clicking on the 'Reset Password via Email' button inside my app:

After clicking on the automatically generated reset URL, you see a web based form where you can reset your password:
Tags:
Android
Android
BaaS
Baas Tutorials
Delphi
Delphi
Email
FireMonkey
iOS
iOS
Notification
parse
Password
RAD Studio
Reset
XE6
XE6


Senior Product Manager, RAD Studio
Comments
-
Please login first in order for you to submit comments