diff --git a/forms/user_oauth2_login.go b/forms/user_oauth2_login.go
index ae5b2a9d..b337ca5e 100644
--- a/forms/user_oauth2_login.go
+++ b/forms/user_oauth2_login.go
@@ -152,14 +152,6 @@ func (form *UserOauth2Login) Submit() (*models.User, *auth.AuthUser, error) {
return err
}
} else {
- // update the existing user verified state
- if !user.Verified {
- user.Verified = true
- if err := txDao.SaveUser(user); err != nil {
- return err
- }
- }
-
// update the existing user empty email if the authData has one
// (this in case previously the user was created with
// an OAuth2 provider that didn't return an email address)
@@ -169,6 +161,15 @@ func (form *UserOauth2Login) Submit() (*models.User, *auth.AuthUser, error) {
return err
}
}
+
+ // update the existing user verified state
+ // (only if the user doesn't have an email or the user email match with the one in authData)
+ if !user.Verified && (user.Email == "" || user.Email == authData.Email) {
+ user.Verified = true
+ if err := txDao.SaveUser(user); err != nil {
+ return err
+ }
+ }
}
// create ExternalAuth relation if missing
diff --git a/ui/.env b/ui/.env
index ac8d317e..60fde515 100644
--- a/ui/.env
+++ b/ui/.env
@@ -4,8 +4,4 @@ PB_PROFILE_COLLECTION = "profiles"
PB_INSTALLER_PARAM = "installer"
PB_RULES_SYNTAX_DOCS = "https://pocketbase.io/docs/manage-collections#rules-filters-syntax"
PB_RELEASES = "https://github.com/pocketbase/pocketbase/releases"
-<<<<<<< HEAD
PB_VERSION = "v0.6.0"
-=======
-PB_VERSION = "v0.5.2"
->>>>>>> master
diff --git a/ui/src/components/users/ExternalAuthsList.svelte b/ui/src/components/users/ExternalAuthsList.svelte
new file mode 100644
index 00000000..de84a03e
--- /dev/null
+++ b/ui/src/components/users/ExternalAuthsList.svelte
@@ -0,0 +1,80 @@
+
+
+{#if isLoading}
+
+
+
+{:else if user?.id && externalAuths.length}
+
+ {#each externalAuths as auth}
+
+
+
{CommonHelper.sentenize(auth.provider, false)}
+
ID: {auth.providerId}
+
+
+ {/each}
+
+{:else}
+ No authorized OAuth2 providers.
+{/if}
diff --git a/ui/src/components/users/PageUsers.svelte b/ui/src/components/users/PageUsers.svelte
index ca8331c9..ed4fcb7c 100644
--- a/ui/src/components/users/PageUsers.svelte
+++ b/ui/src/components/users/PageUsers.svelte
@@ -199,17 +199,19 @@
{#if user.email}
{user.email}
+
+ {user.verified ? "Verified" : "Unverified"}
+
{:else}
N/A
+ {#if user.verified}
+
OAuth2 verified
+ {/if}
{/if}
-
-
- {user.verified ? "Verified" : "Unverified"}
-
diff --git a/ui/src/components/users/UserSelectOption.svelte b/ui/src/components/users/UserSelectOption.svelte
index 1af87eb3..69eb713b 100644
--- a/ui/src/components/users/UserSelectOption.svelte
+++ b/ui/src/components/users/UserSelectOption.svelte
@@ -11,5 +11,7 @@
{item.id}
-
{item.email}
+ {#if item.email}
+
{item.email}
+ {/if}
diff --git a/ui/src/components/users/UserUpsertPanel.svelte b/ui/src/components/users/UserUpsertPanel.svelte
index 24b93ce2..c04728d4 100644
--- a/ui/src/components/users/UserUpsertPanel.svelte
+++ b/ui/src/components/users/UserUpsertPanel.svelte
@@ -11,9 +11,13 @@
import Field from "@/components/base/Field.svelte";
import Toggler from "@/components/base/Toggler.svelte";
import OverlayPanel from "@/components/base/OverlayPanel.svelte";
+ import ExternalAuthsList from "./ExternalAuthsList.svelte";
const dispatch = createEventDispatcher();
+
const formId = "user_" + CommonHelper.randomString(5);
+ const accountTab = "account";
+ const providersTab = "providers";
let panel;
let user = new User();
@@ -24,6 +28,7 @@
let passwordConfirm = "";
let changePasswordToggle = false;
let verificationEmailToggle = true;
+ let activeTab = accountTab;
$: hasChanges = (user.isNew && email != "") || changePasswordToggle || email !== user.email;
@@ -41,7 +46,9 @@
function load(model) {
setErrors({}); // reset errors
+
user = model?.clone ? model.clone() : new User();
+
reset(); // reset form
}
@@ -75,6 +82,8 @@
request
.then(async (result) => {
+ user = result;
+
if (verificationEmailToggle) {
sendVerificationEmail(false);
}
@@ -114,7 +123,7 @@
function sendVerificationEmail(notify = true) {
return ApiClient.users
- .requestVerification(user.isNew ? email : user.email)
+ .requestVerification(user.email || email)
.then(() => {
confirmClose = false;
hide();
@@ -130,8 +139,8 @@
{
if (hasChanges && confirmClose) {
confirm("You have unsaved changes. Do you really want to close the panel?", () => {
@@ -146,95 +155,15 @@
on:show
>
-
- {user.isNew ? "New user" : "Edit user"}
-
-
-
-
-
-
- {#if !user.isNew}
-
+
+ {#if !user.isNew}
+
+ {/if}
+
+
+
+ {#if !user.isNew}
+
+
+
+ {/if}
+
+
+
+
hide()}>
Cancel
-
- {user.isNew ? "Create" : "Save changes"}
-
+
+ {#if activeTab === accountTab}
+
+ {user.isNew ? "Create" : "Save changes"}
+
+ {/if}
diff --git a/ui/src/scss/_form.scss b/ui/src/scss/_form.scss
index 37125ac2..45fbcdc4 100644
--- a/ui/src/scss/_form.scss
+++ b/ui/src/scss/_form.scss
@@ -229,7 +229,7 @@ button {
padding: 0;
gap: 0;
i {
- $iconSize: 23px;
+ $iconSize: 24px;
font-size: 1.2857rem;
text-align: center;
width: $iconSize;