2016-10-06 57 views
1

我是新來的快速,所以忍受着我。我試圖使用Auth0的庫A0SimpleKeychain:https://github.com/auth0/SimpleKeychain來存儲用戶的令牌。我跟着他們的文檔,我想出了這個登錄功能:使用A0SimpleKeychain檢索鑰匙串值返回零在OS10

@IBAction func login(_ sender: UIButton) { 
    let payload: Parameters = [ 
     "username": self.usernameTextField.text!, 
     "password": self.passwordTextField.text! 
    ] 

    Alamofire.request("my/url", method: .post, parameters: payload, encoding: JSONEncoding.default).responseJSON { response in 

     let json = JSON(response.result.value) 
     let token = json["token"] 

     let jwtToken = token.string! 

     A0SimpleKeychain().setString(jwtToken, forKey:"user-jwt") 

     let jwt = A0SimpleKeychain().string(forKey: "user-jwt") 

     print(jwt) 
    } 
} 

我在這說print(jwt)應打印標記打印nil,而不是問題。如果我打印出jwtToken,那麼它會打印出正確的值,所以我知道它不是零。我試過只是把一個「測試」字符串,看看我的jwtToken是否有任何問題,因爲我仍然理解可選項並解開它們,但它也只是返回零。

A0SimpleKeychain().setString("testString", forKey:"user-jwt")

我在OSX 10.11.6和斯威夫特運行3

+0

OSX 10.6?我不會相信你曾祖父的操作系統上的任何結果。 – BaseZen

+0

@BaseZen大聲笑它實際上是10.11.6這是一種類型 – Rodrigo

+0

大聲笑更有意義什麼都不會安裝在操作系統10.6 – BaseZen

回答

3

沒有錯的代碼。這是一個項目設置問題。 KeyChains不存在於真空中;爲了安全起見,只允許他們按照您的代碼簽名應用程序指定的權利進行操作,並且由於代碼簽名,這些權利在構建時被密封。看起來,至少在模擬器中,Xcode/iOS 10中的一個錯誤並不是尊重或不設置默認鑰匙串權利application-identifier並激活它,您還必須啓用keychain-access-groups權利。

[編輯]如果你改變你的構建目標8.4和模擬8.4設備,你會看到它不需要修改設置。

到iOS 10下工作,在你的目標的項目設置,轉到第二個選項卡Capabilities並啓用「鑰匙串共享」。系統會提示您輸入Apple ID密碼,並詢問要將哪個Apple ID附加到鑰匙串上。

您深入的錯誤代碼是-34018。您確實需要檢查setString的返回值,它可以是false

(編輯) 參考: A0SimpleKeyChain.m:151 OSStatus status = SecItemAdd((__bridge CFDictionaryRef)newQuery, NULL); - > -34018

SecItemAdd and SecItemCopyMatching returns error code -34018 (errSecMissingEntitlement)

https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html

「從高電平透視,鑰匙扣服務使用的應用程序的代碼簽名及其嵌入的權利,以確保只有授權的應用才能訪問特定的鑰匙鏈項目。「