mirror of
https://github.com/XcodesOrg/XcodesApp.git
synced 2026-03-25 08:55:46 +00:00
Show stored username in General preference pane
This reverts the change from 90c067997b so that the username is shown in situations where we don't have a valid session but could almost certainly get one. Instead, to achieve what that commit was trying to do, we'll instead remove the username from UserDefaults if auth fails with an invalid username or password error. I think this will more closely match what users expect in this UI.
I've added a comment in the UI explaining why it is the way it is. It might also be worth considering renaming AuthenticationState or its cases to better reflect that it's probably more about the (short-lived) session state than whether the user has signed in before and has stored their credentials.
This commit is contained in:
parent
35dba9322c
commit
75457dd9eb
2 changed files with 8 additions and 2 deletions
|
|
@ -179,6 +179,7 @@ class AppState: ObservableObject {
|
|||
let username = Current.defaults.string(forKey: "username") {
|
||||
// remove any keychain password if we fail to log with an invalid username or password so it doesn't try again.
|
||||
try? Current.keychain.remove(username)
|
||||
Current.defaults.removeObject(forKey: "username")
|
||||
}
|
||||
|
||||
// This error message is not user friendly... need to extract some meaningful data in the different cases
|
||||
|
|
|
|||
|
|
@ -13,8 +13,13 @@ struct GeneralPreferencePane: View {
|
|||
Preferences.Container(contentWidth: 400.0) {
|
||||
Preferences.Section(title: "Apple ID") {
|
||||
VStack(alignment: .leading) {
|
||||
if appState.authenticationState == .authenticated {
|
||||
Text(Current.defaults.string(forKey: "username") ?? "-")
|
||||
// If we have saved a username then we will show it here,
|
||||
// even if we don't have a valid session right now,
|
||||
// because we should be able to get a valid session if needed with the password in the keychain
|
||||
// and a 2FA code from the user.
|
||||
// Note that AppState.authenticationState is not necessarily .authenticated in this case, though.
|
||||
if let username = Current.defaults.string(forKey: "username") {
|
||||
Text(username)
|
||||
Button("Sign Out", action: appState.signOut)
|
||||
} else {
|
||||
Button("Sign In", action: { self.appState.presentingSignInAlert = true })
|
||||
|
|
|
|||
Loading…
Reference in a new issue