Blog

How to Change a User’s Password via API (If the User Can Login)

by on September 1, 2019

In another article, we wrote about how to change a user’s password using Backendless Console. There are also ways to change a user’s password using API. In this post, we will review the API that can be used to change the password if a user can log in.

A different approach is needed when a user cannot log in for the reason that he/she forgot their password. That scenario, requiring a temporary password be created, is discussed here.

    Backendless.UserService.login( "spidey@backendless.com", "greeng0blin", new AsyncCallback<BackendlessUser>()
    {
        @Override
        public void handleResponse( BackendlessUser user )
        {
           user.setPassword( "MyNewPassword" );
           Backendless.Data.of( BackendlessUser.class ).save( user, new AsyncCallback<BackendlessUser>()
           {
               @Override
               public void handleResponse( BackendlessUser backendlessUser )
               {
                   System.out.println( "User password has been changed" );
               }
               @Override
               public void handleFault( BackendlessFault backendlessFault )
               {
                   System.out.println( "Server reported an error - " + backendlessFault.getMessage() );
               }
           } );
        }
        @Override
        public void handleFault( BackendlessFault backendlessFault )
        {
            System.out.println( "Server reported an error - " + backendlessFault.getMessage() );
        }
    } );

    val user = Backendless.UserService.login("spidey@backendless.com", "greeng0blin")
    user.password = "myNewPassword"
    Backendless.Data.of(BackendlessUser::class.java).save(user, object : AsyncCallback {
       override fun handleResponse(response: BackendlessUser?) {
           Log.i(TAG, "User password has been changed")
       }
    
       override fun handleFault(fault: BackendlessFault?) {
           Log.e(TAG, fault?.message)
       }
    })

    [Backendless.shared.userService loginWithIdentity:@"spidey@backendless.com" password:@"greeng0blin" responseHandler:^(BackendlessUser *loggedInUser) {
        loggedInUser.password = @"MyNewPassword";
        [[Backendless.shared.data of:[BackendlessUser class]] updateWithEntity:loggedInUser responseHandler:^(BackendlessUser *updatedUser) {
            NSLog(@"User password has been changed");
        } errorHandler:^(Fault *fault) {
            NSLog(@"Error: %@", fault.message);
        }];
    } errorHandler:^(Fault *fault) {
        NSLog(@"Error: %@", fault.message);
    }];

    Backendless.shared.userService.login(identity: "spidey@backendless.com", password: "greeng0blin", responseHandler: { loggedInUser in
        loggedInUser.password = "MyNewPassword"
        Backendless.shared.data.of(BackendlessUser.self).update(entity: loggedInUser, responseHandler: { updatedUser in
            print("User password has been changed")
        }, errorHandler: { fault in
            print("Error:\(fault.message ?? "")")
        })
    }, errorHandler: { fault in
        print("Error:\(fault.message ?? "")")
    })

    const Backendless = require('backendless')
    /*
     Or use `import Backendless from 'backendless'` for client side.
     If you don't use npm or yarn to install modules, you can add the following line
     <script src="//api.backendless.com/sdk/js/latest/backendless.min.js"></script>
     to your index.html file and use the global Backendless variable.
    */
    
    Backendless.initApp('YOUR_APP_ID', 'YOUR_JS_API_KEY')
    
    const onLoginSuccess = user => {
      user.password = 'MyNewPassword'
    
      return Backendless.UserService.update(user)
    }
    
    const onPasswordUpdateSuccess = user => {
      console.log('User password has been changed')
    }
    
    const onError = error => {
      console.error('Server reported an error: ', error.message)
      console.error('error code: ', error.code)
      console.error('http status: ', error.status)
    }
    
    Backendless.UserService.login('spidey@backendless.com', 'greeng0blin')
      .then(onLoginSuccess)
      .then(onPasswordUpdateSuccess)
      .catch(onError)
    

    var user = await Backendless.UserService.login("spidey@backendless.com", "greeng0blin");
    user.password = "MyNewPassword";
    Backendless.Data.of("Users").save(user.toJson()).then((response) => print("User password has been changed"));

    Notice the sample shows user login first. This is required as the user identity must be established for the subsequent password update call to go through.

    Leave a Reply