我是iOS开发和AWS Amplify框架的新手。我目前正在通过身份验证文档进行工作,但是目前尚不清楚如何检查给定用户的登录状态。我只想在用户尚未登录时显示登录表单。如何实现此目的?在文档中似乎没有列出任何信息,而且我从Google找到的唯一资源已应用于其他平台(反应)。
答案 0 :(得分:1)
您需要监听Auth事件并更新标志Eg:isSignedIn
的状态,该标志最初将被注销。
final class UserData: ObservableObject {
@Published var isSignedIn : Bool = false
}
import UIKit
import Amplify
import AmplifyPlugins
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
public let userData = UserData()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
do {
try Amplify.add(plugin: AWSCognitoAuthPlugin())
try Amplify.configure()
// load data when user is signedin
self.checkUserSignedIn()
// listen to auth events
_ = Amplify.Hub.listen(to: .auth) { (payload) in
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn:
self.updateUI(forSignInStatus: true)
case HubPayload.EventName.Auth.signedOut:
self.updateUI(forSignInStatus: false)
case HubPayload.EventName.Auth.sessionExpired:
self.updateUI(forSignInStatus: false)
default:
break
}
}
} catch {
print("Failed to configure Amplify \(error)")
}
return true
}
func updateUI(forSignInStatus : Bool) {
DispatchQueue.main.async() {
self.userData.isSignedIn = forSignInStatus
}
}
// when user is signed in, fetch its details
func checkUserSignedIn() {
// every time auth status changes, let's check if user is signedIn or not
// updating userData will automatically update the UI
_ = Amplify.Auth.fetchAuthSession { (result) in
do {
let session = try result.get()
self.updateUI(forSignInStatus: session.isSignedIn)
} catch {
print("Fetch auth session failed with error - \(error)")
}
}
}
查看完整的代码here。