본문 바로가기

카테고리 없음

105 iOS 로그인 & 로그아웃

** 로그인 & 로그아웃 구현

=> 모바일이나 PC에서는 Web하고는 조금 다르게 구현

=> Web의 경우는 Session을 이용해서 로그인을 유지하는 경우가 많다.

모바일이나 PC용 애플리케이션은 Session이 없다.

로컬의 파일이나 데이터베이스를 이용해서 로그인 정보를 저장한다.

로그인을 할 때 로그인 정보를 파일이나 데이터베이스에 저장하고 로그아웃할 때 파일이나 데이터베이스의 데이터를 삭제하는 방식을 이용

 

=> 네비게이션 바의 오른쪽에 바 버튼을 만들어서 로그인 되어있으면 로그아웃 그리고 로그인되어 있지 않으면 로그인으로 출력하고 버튼을 누를 때 기능을 수행

로그인 정보를 login.txt 파일에 저장

 

1.  ItemListVC.swift 파일에 바버튼 아이템을 눌렀을 때 호출될 메소드를 생성

    //네비게이션 바의 버튼을 눌렀을 대 호출될 메소드
    //sender는 이벤트가 발생한 객체 - 원래의 자료형으로 형변환해서 사용
    @objc func login(_ sender:Any){
        //로그인 여부를 저장할 파일의 경로를 생성
        
        //도큐먼트 디렉토리 경로 만들기
        let fileMgr = FileManager.default
        let docPathURL = fileMgr.urls(for: .documentDirectory, in: .userDomainMask).first!
        //파일 경로 만들기
        let loginPath = docPathURL.appendingPathComponent("login.txt").path
        
        //이벤트가 발생한 객체를 찾기
        let barButtonItem = sender as! UIBarButtonItem
        
        if barButtonItem.title == "로그인"{
            //로그인 대화상자 만들어서 출력
            let alert = UIAlertController(title: "로그인", message: "이메일과 비밀번호를 입력하세요!", preferredStyle: .alert)
            
            //입력 부분 만들기
            alert.addTextField(configurationHandler: {(tf) -> Void in tf.placeholder = "이메일을 입력하세요!!"})
            alert.addTextField(){(tf) -> Void in
                tf.placeholder = "비밀번호를 입력하세요!!"
                tf.isSecureTextEntry = true
            }
            
            //버튼 추가
            alert.addAction(UIAlertAction(title: "로그인", style: .default, handler: {(UIAlertAction) -> Void in
                //입력한 내용 가져오기
                let email = alert.textFields?[0].text
                let pw = alert.textFields?[1].text
                
                //POST 방식을 전송할 파라미터 만들기
                let parameters = ["email":email!, "pw":pw!]
                
                //파일 업로드가 없는 POST 방식 요청
                let request = AF.request("http://cyberadam.cafe24.com/member/login", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: [:])
                request.responseJSON{
                    response in
                    
                    if let jsonObject = response.value as? [String:Any]{
                        NSLog(jsonObject.description)
                    }
                }
            }))
            alert.addAction(UIAlertAction(title: "취소", style: .cancel))
            
            self.present(alert, animated: true)
        }else{
            
        }
    }

 

 

2. ItemListVC.swift 파일의 viewDidLoad 메소드에 바버튼 아이템을 추가하는 코드를 작성

        //로그인 버튼을 배치
        
        //로그인 저장 여부가 저장된 파일의 경로 만들기
        let loginPath = docPath.appendingPathComponent("login.txt").path
        //파일의 존재 여부로 버튼의 타이틀 설정
        var buttonTitle : String!
        if fileMgr.fileExists(atPath: loginPath) == true{
            buttonTitle = "로그아웃"
            //로그인 되어 있는 경우는 닉네님을 타이틀로 설정
            let databuffer = fileMgr.contents(atPath: loginPath)
            let loginText = String(bytes: databuffer!, encoding: .utf8)
            //:을 기준으로 분할
            let ar = loginText?.components(separatedBy: ":")
            //두번째 문자열을 타이를로 ㅓㄹ정
            self.title = ar![1]
        }else{
            buttonTitle = "로그인"
        }