feat: 添加passkey实体

This commit is contained in:
2025-12-18 12:16:28 +08:00
parent 77b7bf8ab2
commit 5fb106ec26
2 changed files with 41 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
import { User } from "src/user/entities/user.entity";
import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
@Entity()
@Index(['user'])
export class PasskeyCredential {
@PrimaryGeneratedColumn('uuid')
id: string;
// 关联用户
@ManyToOne(() => User, user => user.passkeys, { onDelete: 'CASCADE' })
user: User;
// WebAuthn 必需字段
@Column({ length: 255 })
name: string; // 用户自定义名称,如 "iPhone", "工作笔记本"
@Column({ unique: true })
credentialId: string; // Base64URL 编码的 credentialId唯一标识
@Column({ type: 'text' })
publicKey: string; // Base64URL 编码的公钥SPKI 格式)
@Column({ type: 'int' })
signCount: number; // 防重放攻击,每次签名递增
// 是否已验证(注册时验证,登录时更新)
@Column({ default: false })
verified: boolean;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}

View File

@@ -1,3 +1,4 @@
import { PasskeyCredential } from 'src/auth/entity/passkey-credential.entity';
import { Role } from 'src/auth/role.enum'; import { Role } from 'src/auth/role.enum';
import { import {
BeforeInsert, BeforeInsert,
@@ -6,6 +7,7 @@ import {
DeleteDateColumn, DeleteDateColumn,
Entity, Entity,
Index, Index,
OneToMany,
PrimaryGeneratedColumn, PrimaryGeneratedColumn,
UpdateDateColumn, UpdateDateColumn,
} from 'typeorm'; } from 'typeorm';
@@ -94,6 +96,9 @@ export class User {
@Column({ type: 'jsonb', default: [] }) @Column({ type: 'jsonb', default: [] })
roles: RoleItem[]; roles: RoleItem[];
@OneToMany(() => PasskeyCredential, credential => credential.user)
passkeys?: PasskeyCredential[];
} }
export class UserPublicProfile { export class UserPublicProfile {