feat: 保存并显示OAuth账号邮箱地址

This commit is contained in:
shaw
2026-01-23 15:17:47 +08:00
parent d27b847442
commit f9ab1daa3c
4 changed files with 27 additions and 6 deletions

View File

@@ -215,5 +215,6 @@ type OrgInfo struct {
// AccountInfo represents account info from OAuth response // AccountInfo represents account info from OAuth response
type AccountInfo struct { type AccountInfo struct {
UUID string `json:"uuid"` UUID string `json:"uuid"`
EmailAddress string `json:"email_address"`
} }

View File

@@ -122,6 +122,7 @@ type TokenInfo struct {
Scope string `json:"scope,omitempty"` Scope string `json:"scope,omitempty"`
OrgUUID string `json:"org_uuid,omitempty"` OrgUUID string `json:"org_uuid,omitempty"`
AccountUUID string `json:"account_uuid,omitempty"` AccountUUID string `json:"account_uuid,omitempty"`
EmailAddress string `json:"email_address,omitempty"`
} }
// ExchangeCode exchanges authorization code for tokens // ExchangeCode exchanges authorization code for tokens
@@ -252,9 +253,15 @@ func (s *OAuthService) exchangeCodeForToken(ctx context.Context, code, codeVerif
tokenInfo.OrgUUID = tokenResp.Organization.UUID tokenInfo.OrgUUID = tokenResp.Organization.UUID
log.Printf("[OAuth] Got org_uuid: %s", tokenInfo.OrgUUID) log.Printf("[OAuth] Got org_uuid: %s", tokenInfo.OrgUUID)
} }
if tokenResp.Account != nil && tokenResp.Account.UUID != "" { if tokenResp.Account != nil {
tokenInfo.AccountUUID = tokenResp.Account.UUID if tokenResp.Account.UUID != "" {
log.Printf("[OAuth] Got account_uuid: %s", tokenInfo.AccountUUID) tokenInfo.AccountUUID = tokenResp.Account.UUID
log.Printf("[OAuth] Got account_uuid: %s", tokenInfo.AccountUUID)
}
if tokenResp.Account.EmailAddress != "" {
tokenInfo.EmailAddress = tokenResp.Account.EmailAddress
log.Printf("[OAuth] Got email_address: %s", tokenInfo.EmailAddress)
}
} }
return tokenInfo, nil return tokenInfo, nil

View File

@@ -17,6 +17,7 @@ export interface OAuthState {
export interface TokenInfo { export interface TokenInfo {
org_uuid?: string org_uuid?: string
account_uuid?: string account_uuid?: string
email_address?: string
[key: string]: unknown [key: string]: unknown
} }
@@ -160,6 +161,9 @@ export function useAccountOAuth() {
if (tokenInfo.account_uuid) { if (tokenInfo.account_uuid) {
extra.account_uuid = tokenInfo.account_uuid extra.account_uuid = tokenInfo.account_uuid
} }
if (tokenInfo.email_address) {
extra.email_address = tokenInfo.email_address
}
return Object.keys(extra).length > 0 ? extra : undefined return Object.keys(extra).length > 0 ? extra : undefined
} }

View File

@@ -113,8 +113,17 @@
<template #cell-select="{ row }"> <template #cell-select="{ row }">
<input type="checkbox" :checked="selIds.includes(row.id)" @change="toggleSel(row.id)" class="rounded border-gray-300 text-primary-600 focus:ring-primary-500" /> <input type="checkbox" :checked="selIds.includes(row.id)" @change="toggleSel(row.id)" class="rounded border-gray-300 text-primary-600 focus:ring-primary-500" />
</template> </template>
<template #cell-name="{ value }"> <template #cell-name="{ row, value }">
<span class="font-medium text-gray-900 dark:text-white">{{ value }}</span> <div class="flex flex-col">
<span class="font-medium text-gray-900 dark:text-white">{{ value }}</span>
<span
v-if="row.extra?.email_address"
class="text-xs text-gray-500 dark:text-gray-400 truncate max-w-[200px]"
:title="row.extra.email_address"
>
{{ row.extra.email_address }}
</span>
</div>
</template> </template>
<template #cell-notes="{ value }"> <template #cell-notes="{ value }">
<span v-if="value" :title="value" class="block max-w-xs truncate text-sm text-gray-600 dark:text-gray-300">{{ value }}</span> <span v-if="value" :title="value" class="block max-w-xs truncate text-sm text-gray-600 dark:text-gray-300">{{ value }}</span>