Created
February 15, 2017 09:57
-
-
Save bright23/0fb9fb2556a0f306bbc07f6525480c30 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// User.swift | |
// WaterLand | |
// | |
// Created by fujiwara on 2016/12/15. | |
// Copyright © 2016年 fujiwara. All rights reserved. | |
// | |
import UIKit | |
import KeychainAccess | |
class LoginUser: NSCoder { | |
static let sharedInstance = LoginUser() | |
let keychain = Keychain() | |
enum LoginUserState { | |
case loggedIn, loggedOut, noneUser | |
} | |
var userState: LoginUserState = .noneUser | |
var name: String = "" | |
var email: String = "" | |
var password: String = "" | |
var rePassword: String = "" | |
var token: String = "" | |
fileprivate override init() { | |
super.init() | |
} | |
func encodeWithCoder(_ aCoder: NSCoder) { | |
aCoder.encode(self.email, forKey: "email") | |
aCoder.encode(self.name, forKey: "name") | |
aCoder.encode(self.password, forKey: "password") | |
aCoder.encode(self.rePassword, forKey: "rePassword") | |
aCoder.encode(self.token, forKey: "token") | |
} | |
required init(coder aDecoder: NSCoder) { | |
super.init() | |
if keychain[AppConst.tokenKey] != nil { | |
self.userState = .loggedIn | |
} else { | |
self.userState = .loggedOut | |
} | |
self.name = aDecoder.decodeObject(forKey: "name") as! String | |
self.email = aDecoder.decodeObject(forKey: "email") as! String | |
self.password = aDecoder.decodeObject(forKey: "password") as! String | |
self.rePassword = aDecoder.decodeObject(forKey: "rePassword") as! String | |
self.token = aDecoder.decodeObject(forKey: "token") as! String | |
} | |
final func logout() { | |
resetUser() | |
keychain[AppConst.tokenKey] = nil | |
userState = .loggedOut | |
} | |
final func getAccessToken() -> String? { | |
return keychain[AppConst.tokenKey] | |
} | |
final func setAccessToken(_ accessToken: String) { | |
do { | |
try keychain.set(accessToken, key: AppConst.tokenKey) | |
} | |
catch let error { | |
print(error) | |
userState = .loggedOut | |
return | |
} | |
userState = .loggedIn | |
} | |
func resetUser() { | |
name = "" | |
email = "" | |
password = "" | |
rePassword = "" | |
userState = .loggedOut | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment