用户使用令牌认证快速登录后,登录详细信息仍然存在

时间:2018-05-30 19:43:55

标签: swift django-rest-auth

我有一个使用rest框架提供API的应用程序。我有应用程序所有设置,但我有一个挑战,当用户登录用户的详细信息得到。登录是通过令牌身份验证实现的,当点击退出按钮时,存储在UserDefaults中,用户详细信息将从设备中删除,并且登录时将显示另一个用户登录,即登录用户,电子邮件和用户名,但它显示了初始登录用户的详细信息,无论我尝试多少,它都不会显示当前登录的用户详细信息,而是显示初始用户详细信息。

我的登录代码是

let defaults = UserDefaults.standard

var isLoggedIn : Bool {

    get {
        return defaults.bool(forKey: LOGGED_IN_KEY)
    }
    set {
        defaults.set(newValue, forKey: LOGGED_IN_KEY)
    }
}

var authToken: String {
    get {
        return defaults.value(forKey: TOKEN_KEY) as? String ?? ""
    }
    set {
        defaults.set(newValue, forKey: TOKEN_KEY)
    }
}

var userUsername: String {
    get {
        return defaults.value(forKey: USER_USERNAME) as? String ?? ""
    }
    set {
        defaults.set(newValue, forKey: USER_USERNAME)
    }
}
//MARK :- LOGGIN
func findUserByUserName(completion: @escaping CompletionHandler) -> Void {

    Alamofire.request(URL_USER_BY_USERNAME, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: TOKEN_HEADER).validate().responseJSON { (response) in

        print("URL USER BY HEADER \(self.authToken)")

        if response.result.error == nil {

            guard let data = response.data else {return}
            let jsonString = String(data: data, encoding: .utf8)
            print(jsonString as Any)
            self.setUserInfo(data: data)

            completion(true)
            }
         else {


            completion(false)
            debugPrint("ERROR 22222\(response.result.error as Any)")
        }
    }
}


func setUserInfo(data: Data) -> Void {
    do {
        let json = try JSON(data: data)
        let pk = json["pk"].intValue
        let username = json["username"].stringValue
        let email = json["email"].stringValue
        let firstName = json["first_name"].stringValue
        let lastName = json["last_nameme"].stringValue

        print("THE USERNAME IZZZZ \(username)")

        UserDataService.instance.setUserData(pk: pk, username: username, email: email, firstName: firstName, lastName: lastName)

    } catch {
        print(error)
    }
}

的UserDetails

class UserDataService {

    static let instance = UserDataService()

    public private(set) var pk = 0
    public private(set) var username = ""
    public private(set) var email = ""
    public private(set) var firstName = ""
    public private(set) var lastName = ""


    func setUserData(pk: Int, username: String, email: String, firstName: String, lastName: String) -> Void {

        self.pk = pk
        self.username = username
        self.email = email
        self.firstName = firstName
        self.lastName = lastName
    }


    func logoutUser() -> Void {
        self.pk = 0
        self.username = ""
        self.email = ""
        self.firstName = ""
        self.lastName = ""
        AuthService.instance.isLoggedIn = false
        AuthService.instance.authToken = ""
        AuthService.instance.userUsername = ""
    }}

我的退出

@IBAction func logoutPressed(_ sender: Any) {
    UserDataService.instance.logoutUser()
   NotificationCenter.default.post(name: NOTIFY_USER_DATA_DID_CHANGE, object: nil)

    dismiss(animated: true, completion: nil)
}

登录的一部分     func setupUserInfo(){

        if AuthService.instance.isLoggedIn {
            loginBtn.setTitle(UserDataService.instance.username, for: .normal)

        } else {
            loginBtn.setTitle("Login", for: .normal)
            userImg.image = UIImage(named: "menuProfileIcon")
            userImg.backgroundColor = UIColor.clear
            tableView.reloadData()
        }
    }

提前致谢,并会根据要求提供更多代码

0 个答案:

没有答案