Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Logging out from TabBarViewController to UIViewController using AccessToken

I am facing problem in how to logging out from "TabBarViewController" to "UIViewController". Firstly I am logging In(using SOAP web service + XML parsing) from UIViewController page, If the userId and Password is Correct then 'Access Token' is generated in database and(collected in variable using XML parsing in our page) and TabBarViewController is loaded(user profile page). Now after logging I want to "LogOut". On Profile Page I placed one button called "Logout".

Now here, I need your Help how to LogOut using 'Access Token'(which is generated during successful logging) So that I turn back to LogIn page agian ?????

Below is code is running when I Press "Login" button after entering "User ID" and "Password" in UITextField :

-(IBAction)Login{

   txtuser.text = @"test";
   txtpwd.text = @"test";

    if([txtuser.text isEqualToString:@"" ]|| [txtpwd.text isEqualToString:@""]) 
    {
        UIAlertView *myAlert = [[UIAlertView alloc]
                                initWithTitle:nil message:@"Please fill all fields" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [myAlert show];
        [myAlert release];
    }
    else
    {

    md5 =[txtpwd text];

   //Calling MD5 Method to Convert password into "hashcode"(Hexadecimal) formate
    md5 = [md5 MD5];

    NSLog(@"%@",md5);
    itmselected =FALSE;

// Calling Web Service Method

    NSString *soapmessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                             "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                             "<soap:Body>\n"
                             "<Login xmlns=\"http://boleapp.com/\">\n"
                             "<UserName>%@</UserName>\n"
                             "<PassHash>%@</PassHash>\n"
                             "</Login>\n"
                             " </soap:Body>\n"
                             " </soap:Envelope>\n",[txtuser text],md5];
    NSLog(@"%@",soapmessage);
    NSURL *url = [NSURL URLWithString:@"http://weibotest.dotnetgeekz.com/servicemain.asmx"];
    NSMutableURLRequest *req = [[NSMutableURLRequest alloc]initWithURL:url];

    NSString *msglength = [NSString stringWithFormat:@"%d",[soapmessage length]];
    [req addValue:@" text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [req addValue:@"http://boleapp.com/Login" forHTTPHeaderField:@"SOAPAction"];
    [req addValue:msglength forHTTPHeaderField:@"Content-Length"];
    [req setHTTPMethod:@"POST"];
    [req setHTTPBody:[soapmessage dataUsingEncoding:NSUTF8StringEncoding]];
    [NSURLConnection connectionWithRequest:req delegate:self];
    webadata = [[NSMutableData alloc]init];
    [txtuser resignFirstResponder];
    [txtpwd resignFirstResponder];   
    }
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [webadata appendData:data];    
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"error");
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    xmlparser = [[NSXMLParser alloc]initWithData:webadata];
    [xmlparser setDelegate:self];
    [xmlparser parse];
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{


    if([elementName isEqualToString:@"Login"])

        soapresult = [[NSMutableString alloc]init];
    itmselected = YES;

}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    if(itmselected){
        NSLog(@"Bool value and Access Token Number and UserID= %@",string);

        if([string isEqualToString:@"false"]){
            [invaliduser setImage:[UIImage imageNamed:@"invalid_username.png"]];

        }
        else{
        NSArray* splits = [string componentsSeparatedByString: @","];
        NSString *strbool = [splits objectAtIndex:0];
        NSString *strAtoken = [splits objectAtIndex:1];
        id UserIdLogin = [splits objectAtIndex:2];
         if ([strbool isEqualToString:@"true"]){

             main.strAccessTokenMain = strAtoken; 
             main.UserIdMain = UserIdLogin;
             NSLog(@"strAccessTokenMain = %@",[main strAccessTokenMain]);

             // Calling "showtabbar" method for Loading TabBarViewController page
             [main showtabbar];      
        }
        }
        [soapresult appendString:string]; 
    }
}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if([elementName isEqualToString:@"LoginResult"]){
        itmselected = NO;
    }
}

// "showtabbar" Method For Launching TabBarViewController

-(void)showtabbar{

//Removing UIViewController's 'Login' page
[self.view removeFromSuperview];
[BoleApp release];

NSLog(@"userID = %@",UserIdMain);
tabbarcontroller = [[UITabBarController alloc]init ];

//Creating Object of "Profile" Class for Launching as First tab of TabBarViewController
profile *view1 = [[profile alloc]initWithNibName:@"profile" bundle:nil ];
view1.strAccessToken = strAccessTokenMain;
view1.UserIdProfile = UserIdMain;
NSLog(@"view1str = %@",view1.strAccessToken);
view1.title = @"Profile";
view1.tabBarItem.image = [UIImage imageNamed:@"profile.png"];   

//Second Tab of TabBarViewController
Brandslist *view2 = [[Brandslist alloc]init];
view2.BrandAccToken = strAccessTokenMain;
view2.UserIdBrndList = UserIdMain;
Instruction *view3 = [[Instruction alloc]init];
settings *view4 = [[settings alloc]init];
view2.title = @"Brands";
view2.tabBarItem.image = [UIImage imageNamed:@"brands.png"];

// Third Tab of TabBarViewController
view3.title = @"Info";
view3.tabBarItem.image = [UIImage imageNamed:@"info.png"];

// Fourth Tab of TabBarViewController
view4.title = @"Settings";
view4.tabBarItem.image = [UIImage imageNamed:@"settings.png"];
view4.AccessToken = strAccessTokenMain;
view4.user_ID = UserIdMain;

[tabbarcontroller setViewControllers:[NSArray arrayWithObjects:view1,view2,view3,view4, nil]];

[mainWindow addSubview:tabbarcontroller.view];

}

This is my profile page's "Logout" Method where I want to write code for Logging out from Profile page to Login page(UIViewController)

-(IBAction)Logout{
    NSLog(@"Logout Button Clicked !!!");
  // What to code here for resuming back to Login page ????? Please Help me out 
    ?
    ?
    ?
}

Friends, Please revert back. Your help would be appreciated . Thanks, Tauseef Khan

like image 536
NSExpression Avatar asked Nov 13 '22 03:11

NSExpression


1 Answers

Instead of using, [mainWindow addSubview], use mainWindow.rootViewController = tabbarcontroller;

This way, when pressing the logout button, you only need to add something like this:

mainWindow.rootViewController = loginViewController;

Using this, you are only changing the viewcontroller being displayed on the Main Window, and you can switch again to the tab bar controller in the same way, after a new login.

like image 56
Paul N Avatar answered Nov 16 '22 02:11

Paul N