Merge remote-tracking branch 'origin/huangzhenbao-admin'
This commit is contained in:
@@ -58,11 +58,23 @@ export async function ensureUserProfile(sessionUser: UTSJSONObject): Promise<Use
|
||||
// 用户不存在,创建新用户资料
|
||||
// 权威字段映射:ak_users.auth_id = auth.uid(),业务主键 id 由数据库自动生成
|
||||
const newUserData = new UTSJSONObject()
|
||||
newUserData.set('id', userId)
|
||||
newUserData.set('auth_id', userId)
|
||||
newUserData.set('email', email)
|
||||
newUserData.set('username', email.split('@')[0] ?? 'user') // 默认用户名为邮箱前缀
|
||||
newUserData.set('role', 'consumer')
|
||||
|
||||
// 获取注册时带入的 meta_data 角色信息,在这个端(商家端/管理端)找不到则默认为 merchant
|
||||
let userRole = 'merchant'
|
||||
const metadata = sessionUser.getJSON('user_metadata') ?? sessionUser.getJSON('raw_user_meta_data')
|
||||
if (metadata != null) {
|
||||
const metaRole = metadata.getString('user_role')
|
||||
if (metaRole != null && metaRole.trim() !== '') {
|
||||
userRole = metaRole
|
||||
}
|
||||
}
|
||||
newUserData.set('role', userRole)
|
||||
|
||||
const insertRes = await supabase.from('ak_users')
|
||||
.insert(newUserData)
|
||||
.select('*', {})
|
||||
@@ -91,7 +103,7 @@ export async function ensureUserProfile(sessionUser: UTSJSONObject): Promise<Use
|
||||
bio: newUser.getString('bio'),
|
||||
avatar_url: newUser.getString('avatar_url'),
|
||||
preferred_language: newUser.getString('preferred_language'),
|
||||
role: newUser.getString('role') ?? 'consumer',
|
||||
role: newUser.getString('role') ?? userRole,
|
||||
created_at: newUser.getString('created_at'),
|
||||
updated_at: newUser.getString('updated_at')
|
||||
} as UserProfile
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'
|
||||
import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'
|
||||
import type { UserProfile, UserStats } from '@/pages/user/types.uts'
|
||||
import type { DeviceInfo } from '@/pages/sense/types.uts'
|
||||
import { SenseDataService, type DeviceParams } from '@/pages/sense/senseDataService.uts'
|
||||
@@ -17,6 +17,7 @@ export type DeviceState = {
|
||||
export type State = {
|
||||
globalNum : number
|
||||
userProfile ?: UserProfile
|
||||
authUser ?: UTSJSONObject
|
||||
isLoggedIn : boolean // 新增字段
|
||||
deviceState : DeviceState // 新增设备状态
|
||||
// 如有需要,可增加更多属性
|
||||
@@ -26,6 +27,7 @@ export type State = {
|
||||
export const state = reactive({
|
||||
globalNum: 0,
|
||||
userProfile: { username: '', email: '' },
|
||||
authUser: null,
|
||||
isLoggedIn: false,
|
||||
deviceState: {
|
||||
devices: [],
|
||||
@@ -54,7 +56,8 @@ export async function getCurrentUser() : Promise<UserProfile | null> {
|
||||
} catch (_) {}
|
||||
|
||||
const sessionInfo = supa.getSession()
|
||||
|
||||
state.authUser = sessionInfo.user
|
||||
|
||||
// 如果没有 session 但 state 中已有用户信息(可能是 admin 这种 mock 账号),不再强制清空
|
||||
if (sessionInfo.user == null) {
|
||||
const existingId = state.userProfile?.id
|
||||
@@ -237,6 +240,7 @@ export function getUserStore() {
|
||||
return {
|
||||
getUserId() : string | null {
|
||||
const sessionInfo = supa.getSession()
|
||||
state.authUser = sessionInfo.user
|
||||
return sessionInfo.user?.getString("id") ?? null
|
||||
},
|
||||
|
||||
@@ -245,11 +249,15 @@ export function getUserStore() {
|
||||
},
|
||||
|
||||
getUserRole() : string | null {
|
||||
const profile = state.userProfile
|
||||
if (profile != null && profile.role != null) {
|
||||
return profile.role
|
||||
}
|
||||
return null
|
||||
// Default role logic - can be enhanced based on your needs
|
||||
const sessionInfo = supa.getSession()
|
||||
state.authUser = sessionInfo.user
|
||||
if (sessionInfo.user == null) return null
|
||||
|
||||
// You can add role detection logic here
|
||||
// For now, return a default role
|
||||
return 'teacher' // or determine from user profile/database
|
||||
},
|
||||
},
|
||||
|
||||
getProfile() : UserProfile | null {
|
||||
|
||||
@@ -129,9 +129,8 @@ class SupabaseService {
|
||||
return session.user.getString('id')
|
||||
}
|
||||
|
||||
// 后备:尝试从本地存储获取 (兼容旧逻辑)
|
||||
const userId = uni.getStorageSync('user_id')
|
||||
return userId ? userId as string : null
|
||||
// 移除基于 storage 的后备获取,严格只认当前 Tab 独立 session
|
||||
return null
|
||||
} catch (e) {
|
||||
console.error('获取用户ID失败:', e)
|
||||
return null
|
||||
|
||||
Reference in New Issue
Block a user