【发布时间】:2021-03-07 20:21:05
【问题描述】:
我很好奇如何在启动我的应用程序时检查用户身份验证。在我的应用程序委托中,我正在执行以下操作。 loggedIn 变量将根据用户当前是否使用“Sign In With Apple”按钮进行设置
extension UIApplication {
func switchHostingController() {
var loggedIn = false
let provider = ASAuthorizationAppleIDProvider()
let userID = UserDefaults.standard.object(forKey: "userID") as? String
provider.getCredentialState(forUserID: userID!) { state, error in
switch state {
case .authorized:
// Credentials are valid.
loggedIn = true
break
case .revoked:
// Credential revoked, log them out
loggedIn = false
break
case .notFound:
// Credentials not found, show login UI
loggedIn = false
break
case .transferred:
loggedIn = false
@unknown default:
loggedIn = false
}
}
if (loggedIn == false)
{
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
window?.rootViewController = UIHostingController(rootView: ContentView())
} else {
let main = Main()
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
window?.rootViewController = UIHostingController(rootView: main)
}
}
}
由于某种原因,上面的loggedIn var 总是返回 false。我知道这与forUserID: userID! 没有返回任何东西有关。但它适用于其他视图...
【问题讨论】:
-
用户第一次登录后,您应该将生成的用户ID/登录结果存储到UserDefaults中(即UserDefaults.standard.setObject(forKey: "userID") = [userID]。然后当启动应用程序时,您只需检查 UserDefaults 是否存在。仅当用户单击登录按钮时才应调用 Auth 提供者凭据。
-
我将用户 ID 保存在以下位置:
UserDefaults.standard.set(userID, forKey: "userID")。我登录并保存。然后撤销权限。并遇到这个问题。 -
@nicksarno 检查 UserDefaults 是否存在的问题是,如果您撤销应用程序的 Apple ID 使用,UserDefaults 仍然存在
标签: swift xcode swiftui sign-in-with-apple