Login and signup are an important feature for some android apps like chat apps because the user will want to save and secure personal messages from others. In SUSI Android app we provide a token to a logged-in user for a limit period of time so that once the user logs in and someone else gets access to the device, then he/she can’t use the user account for a long period of time. It is a security provided from our side but the user also has to maintain some security. Cyber security risks have increased and hacking technologies have improved a lot in the past 10 years. So, using the same password for a long period of time absolutely puts your account security at risk. So to keep your account secure you should change/reset your password regularly. In this blog post, I will show you how reset password option is implemented in SUSI Android app.
Layout design for reset password
Reset password option is added in the setting. When the user clicks on reset password option a dialog box pops up. There are three textinputlayout boxes – each for the current password, new password and confirm password. I have used textinputlayout instead of simple edittext box because it helps user to show first “hint” and when user taps on, hint will come up with text over it as floating label so that the user can understand what to add in that box and also in case of error we can show that error to user.
Reset Password implementation
On clicking reset password option a dialog box appears in which user inserts the current password, new password and confirm password to confirm the new password. Before sending new password to the server we perform two checks
- New password should not be empty and length of new password should be at least six.
- New password and confirm password must be same.
if (!CredentialHelper.isPasswordValid(newPassword)) {
settingView?.passwordInvalid(Constant.NEW_PASSWORD) return } if (newPassword != conPassword) { settingView?.invalidCredentials(false, Constant.NEW_PASSWORD) return } |
And when these two checks are passed we send “new password” to server.
Endpoint use to reset password is
http://api.susi.ai/aaa/changepassword.json?changepassword=your mail id&password=current password&newpassword=newpassword |
As you can see it needed three parameters
- changepassword: Your email id
- password : Your current password
- newpassword: Your new password
When user logs in, we save user’s email id so that the user doesn’t have to provide it again and again when the user wants to change the password.
utilModel.saveEmail(email) |
The user provides current password and new password through dialog box. We used resetPassword method to reset the password. We send these three parameters to the server using resetPassword method and if the password changed successfully then server sends a message.
override fun resetPassword(password: String, newPassword: String, listener: ISettingModel.onSettingFinishListener) {
val email = PrefManager.getString(Constant.SAVE_EMAIL, null) resetPasswordResponseCall = ClientBuilder().susiApi .resetPasswordResponse(email,password,newPassword) resetPasswordResponseCall.enqueue(object : Callback<ResetPasswordResponse> { } ) } |
We used retrofit library for network call and resetPasswordResponse is a model class using which we are retrieving server response.
Reference
- Tutorial on how to use textinputlayout: https://code.tutsplus.com/tutorials/creating-a-login-screen-using-textinputlayout–cms-24168
- Tutorial on how to build custom dialog box: http://android.pcsalt.com/create-alertdialog-with-custom-layout-using-xml-layout/
- Github link of SUSI Server: https://github.com/fossasia/susi_server
- Tutorial on how to use retrofit library using kotlin: https://segunfamisa.com/posts/using-retrofit-on-android-with-kotlin