2016-02-08 22 views
5

Tôi đang triển khai đăng nhập-logic bằng Firebase chỉ với Facebook làm nhà cung cấp.Thực hành tốt nhất để lưu trữ Người dùng hiện tại sau khi đăng nhập

Tôi làm cách nào để có thể lưu CurrentUser sau khi đăng nhập để sử dụng dữ liệu cá nhân trong trải nghiệm ứng dụng sau này?

Hiện tại tôi đang sử dụng một bản đơn có phiên bản User. Một cái gì đó như thế này:

CurrentUser.swift

class CurrentUser { 

    static let i: CurrentUser = CurrentUser() 

    var cUser: User? 

    private init() { 

    } 

    func setCurrentUser(u: User) { 
     cUser = u 
    } 

    func getCurrentUser() -> User { 
     return cUser! 
    } 

    func clearUser() { 
     cUser = nil 
    } 

    func userIsLogged() -> Bool { 
     return cUser != nil 
    } 

} 

Và tôi đang sử dụng mà singleton theo cách này:

LoginViewController.swift

class LoginViewController: UIViewController { 
    ... 
    func createCurrentUser(authData: FAuthData) { 

     let u = User(uid: authData.uid, displayName: authData.providerData["displayName"] as! String, email: authData.providerData["email"] as! String) 

     u.wrapperFromFacebookData(authData.providerData) 

     ref.childByAppendingPath("users").childByAppendingPath(u.uid).setValue(u.toDict()) 

     CurrentUser.i.setCurrentUser(u) 

    } 
    ... 

} 

tôi không nghĩ rằng đây là thực hành tốt nhất. Trước Firebase, tôi đã quen với việc xử lý logic người dùng dựng sẵn của Parse, điều đó khá dễ dàng hơn.

Trả lời

1

Tôi đang phải đối mặt với vấn đề chính xác và liên kết này đã giúp rất nhiều: http://totallyswift.com/ios-app-development-part-2/

Những gì ông đã làm là tạo ra một singleton (CurrentUser) mà phù hợp với lớp người dùng.

class var currentUser: User 
{ 
    struct Static 
    { 
     static var instance: User? 
    } 

    if Static.instance == nil 
    { 
     if let load: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey(kUserDataKey) 
     { 
      Static.instance = User(data: load as [String: AnyObject]) 
     } 
     else 
     { 
      Static.instance = User() 
     } 
    } 

    return Static.instance! 
} 
Các vấn đề liên quan