Locksmith error: Locksmith.LocksmithError.interactionNotAllowed
Locksmith error: Locksmith.LocksmithError.interactionNotAllowed
我们正在使用 Locksmith 为 Keychain 保存用户数据。最后一切正常,但由于某种原因,我们收到错误 Locksmith.LocksmithError.interactionNotAllowed
.
的崩溃
遵循崩溃发生的代码:
func updateUserAccessToken(forAccount account: String, token: String) {
var userAccessToken = Locksmith.loadDataForUserAccount(userAccount: account) ?? [String: Any]()
userAccessToken[“token”] = token
try! Locksmith.updateData(data: userAccessToken, forUserAccount: account)
}
为什么上面的代码对于其他用户会崩溃?直到。现在我们无法复制上述崩溃。很感谢任何形式的帮助。谢谢!
更新:
所以我们最终能够重现这次崩溃,这是因为我们在设备锁定时访问钥匙串。我发现您可以更改钥匙串的 "accessibility option",但我不确定如何在 Locksmith 中进行更改。有人吗?
我发现如果您使用 协议基础 方法,更改 可访问性选项 会容易得多。但不幸的是我们的应用程序没有使用它。所以我所做的是创建如下扩展:
extension Locksmith {
fileprivate static func loadDataForUserAccount(userAccount: String,
inService service: String = LocksmithDefaultService,
accessibleOption: LocksmithAccessibleOption) -> [String: Any]? {
struct ReadRequest: GenericPasswordSecureStorable, ReadableSecureStorable {
let service: String
let account: String
var accessible: LocksmithAccessibleOption?
}
let request = ReadRequest(service: service, account: userAccount, accessible: accessibleOption)
return request.readFromSecureStore()?.data
}
fileprivate static func updateData(data: [String: Any],
forUserAccount userAccount: String,
inService service: String = LocksmithDefaultService,
accessibleOption: LocksmithAccessibleOption) throws {
struct UpdateRequest: GenericPasswordSecureStorable, CreateableSecureStorable {
let service: String
let account: String
let data: [String: Any]
var accessible: LocksmithAccessibleOption?
}
let request = UpdateRequest(service: service, account: userAccount, data: data, accessible: accessibleOption)
return try request.updateInSecureStore()
}
}
注意: 更改 "accessibility option" 可能会导致您无法访问之前使用默认设置保存的数据 "accessibility option"。如果您需要这些数据,您可能需要单独处理。
我们正在使用 Locksmith 为 Keychain 保存用户数据。最后一切正常,但由于某种原因,我们收到错误 Locksmith.LocksmithError.interactionNotAllowed
.
遵循崩溃发生的代码:
func updateUserAccessToken(forAccount account: String, token: String) {
var userAccessToken = Locksmith.loadDataForUserAccount(userAccount: account) ?? [String: Any]()
userAccessToken[“token”] = token
try! Locksmith.updateData(data: userAccessToken, forUserAccount: account)
}
为什么上面的代码对于其他用户会崩溃?直到。现在我们无法复制上述崩溃。很感谢任何形式的帮助。谢谢!
更新: 所以我们最终能够重现这次崩溃,这是因为我们在设备锁定时访问钥匙串。我发现您可以更改钥匙串的 "accessibility option",但我不确定如何在 Locksmith 中进行更改。有人吗?
我发现如果您使用 协议基础 方法,更改 可访问性选项 会容易得多。但不幸的是我们的应用程序没有使用它。所以我所做的是创建如下扩展:
extension Locksmith {
fileprivate static func loadDataForUserAccount(userAccount: String,
inService service: String = LocksmithDefaultService,
accessibleOption: LocksmithAccessibleOption) -> [String: Any]? {
struct ReadRequest: GenericPasswordSecureStorable, ReadableSecureStorable {
let service: String
let account: String
var accessible: LocksmithAccessibleOption?
}
let request = ReadRequest(service: service, account: userAccount, accessible: accessibleOption)
return request.readFromSecureStore()?.data
}
fileprivate static func updateData(data: [String: Any],
forUserAccount userAccount: String,
inService service: String = LocksmithDefaultService,
accessibleOption: LocksmithAccessibleOption) throws {
struct UpdateRequest: GenericPasswordSecureStorable, CreateableSecureStorable {
let service: String
let account: String
let data: [String: Any]
var accessible: LocksmithAccessibleOption?
}
let request = UpdateRequest(service: service, account: userAccount, data: data, accessible: accessibleOption)
return try request.updateInSecureStore()
}
}
注意: 更改 "accessibility option" 可能会导致您无法访问之前使用默认设置保存的数据 "accessibility option"。如果您需要这些数据,您可能需要单独处理。