Blog

How to logout the current user from a Backendless app with the User Logout API

by on April 7, 2015

The Logout API is a logical counterpart for the User Login API. The logout step is not required for most apps – the user session will expire automatically. However, some apps provide the functionality, especially those with a special multiple login policy or the expection of greater security, such as financial apps. The logout API is very simple – a single line of code terminates the current session:

    Asynchronous API sample (Android and Plain Java):

    final AsyncCallback<Void> logoutResponder = new AsyncCallback<Void>()
    {
        @Override
        public void handleResponse( Void aVoid )
        {
            boolean isValidLogin = Backendless.UserService.isValidLogin();
            System.out.println( "Is user logged in? - " + isValidLogin );
        }
        @Override
        public void handleFault( BackendlessFault backendlessFault )
        {
            System.out.println( "Server reported an error " + backendlessFault.getMessage() );
        }
    };
    AsyncCallback<BackendlessUser> loginResponder = new AsyncCallback<BackendlessUser>()
    {
        @Override
        public void handleResponse( BackendlessUser backendlessUser )
        {
            boolean isValidLogin = Backendless.UserService.isValidLogin();
            System.out.println( "Is user logged in? - " + isValidLogin );
            System.out.println( "Logging user out" );
            Backendless.UserService.logout( logoutResponder );
        }
        @Override
        public void handleFault( BackendlessFault backendlessFault )
        {
            System.out.println( "Server reported an error " + backendlessFault.getMessage() );
        }
    };
    System.out.println( "Logging user in" );
    Backendless.UserService.login( "spidey@backendless.com", "greeng0blin", loginResponder );

    Synchronous API sample (Plain Java only):

    System.out.println( "Logging user in" );
    BackendlessUser user = Backendless.UserService.login( "spidey@backendless.com", "greeng0blin" );
    boolean isValidLogin = Backendless.UserService.isValidLogin();
    System.out.println( "Is user logged in? - " + isValidLogin );
    System.out.println( "Logging user in" );
    Backendless.UserService.logout();
    isValidLogin = Backendless.UserService.isValidLogin();
    System.out.println( "Is user logged in? - " + isValidLogin );

    Log.i(TAG, "Logging user in")
    val user = Backendless.UserService.login("spidey@backendless.com", "greeng0blin")
    
    var isValidLogin = Backendless.UserService.isValidLogin
    Log.i(TAG, "Is user logged in? - $isValidLogin")
    
    Log.i(TAG, "Logging user out")
    Backendless.UserService.logout()
    
    isValidLogin = Backendless.UserService.isValidLogin
    Log.i(TAG, "Is user logged in? - $isValidLogin")

    NSLog(@"Logging user in");
        
    [Backendless.shared.userService loginWithIdentity:@"spidey@backendless.com" password:@"greeng0blin" responseHandler:^(BackendlessUser *user) {
          
        [Backendless.shared.userService isValidUserTokenWithResponseHandler:^(BOOL isValidLogin) {
                
            NSLog(@"Is user logged in? - %@", isValidLogin ? @"true" : @"false");
            NSLog(@"Logging user out");
                
            [Backendless.shared.userService logoutWithResponseHandler:^{
                    
                [Backendless.shared.userService isValidUserTokenWithResponseHandler:^(BOOL isValidLogin) {
                    NSLog(@"Is user logged in? - %@", isValidLogin ? @"true" : @"false");
                } errorHandler:^(Fault *fault) {
                    NSLog(@"Error: %@", fault.message);
                }];
                    
            } errorHandler:^(Fault *fault) {
                NSLog(@"Error: %@", fault.message);
            }];
                
        } errorHandler:^(Fault *fault) {
            NSLog(@"Error: %@", fault.message);
        }];
            
    } errorHandler:^(Fault *fault) {
        NSLog(@"Error: %@", fault.message);
    }];

    print("Logging user in")
            
    Backendless.shared.userService.login(identity: "spidey@backendless.com", password: "greeng0blin", responseHandler: { user in
              
        Backendless.shared.userService.isValidUserToken(responseHandler: { isValidLogin in
                    
            print("Is user logged in? - \(isValidLogin)")
            print("Logging user out")
                    
            Backendless.shared.userService.logout(responseHandler: {
                        
                Backendless.shared.userService.isValidUserToken(responseHandler: { isValidLogin in                        
                    print("Is user logged in? - \(isValidLogin)")
                }, errorHandler: { fault in
                    print("Error: \(fault.message ?? "")")
                })
                       
            }, errorHandler: { fault in
                print("Error: \(fault.message ?? "")")
            })
                   
        }, 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 checkIsUserLoginValid = () => {
      return Backendless.UserService.isValidLogin()
        .then(isValidLogin => console.log(`Is user logged in? - ${ isValidLogin }`))
    }
    
    const logoutUser = () => {
      console.log('Logging user out')
    
      return Backendless.UserService.logout()
    }
    
    const onError = error => {
      console.error('Server reported an error: ', error.message)
      console.error('error code: ', error.code)
      console.error('http status: ', error.status)
    }
    
    console.log('Logging user in')
    Backendless.UserService.login('spidey@backendless.com', 'greeng0blin')
      .then(checkIsUserLoginValid)
      .then(logoutUser)
      .then(checkIsUserLoginValid)
      .catch(onError)
    

    print("Logging user in");
    var user = await Backendless.UserService.login("spidey@backendless.com", "greeng0blin");
    
    bool isValidLogin = await Backendless.UserService.isValidLogin();
    print("Is user logged in? - $isValidLogin");
    
    print("Logging user out");
    await Backendless.UserService.logout();
    
    isValidLogin = await Backendless.UserService.isValidLogin();
    print("Is user logged in? - $isValidLogin");

    The code produces the following output:

    Logging user in
    Is user logged in? - true
    Logging user out
    Is user logged in? - false