auth-使用简单注册路由.md 5.2 KB


description: "使用简单注册路由"

简单注册路由使用指南

新增功能

已添加简单注册路由,支持只输入用户名即可完成注册,自动处理用户名冲突。

API端点

  • 方法: POST
  • 路径: /api/v1/auth/register/simple
  • Content-Type: application/json

请求参数

{
  "username": "用户名"
}

响应格式

成功响应 (201 Created):

{
  "token": "jwt.token.here",
  "user": {
    "id": 123,
    "username": "用户名1234"
  }
}

错误响应:

{
  "code": 500,
  "message": "错误信息"
}

使用示例

cURL示例

# 基本使用
curl -X POST http://localhost:3000/api/v1/auth/register/simple \
  -H "Content-Type: application/json" \
  -d '{"username": "testuser"}'

# 带详细输出
curl -X POST http://localhost:3000/api/v1/auth/register/simple \
  -H "Content-Type: application/json" \
  -d '{"username": "testuser"}' \
  -i

JavaScript/TypeScript示例

import { authClient } from '@/client/api';
import type { InferResponseType, InferRequestType } from 'hono/client';

// 使用RPC客户端
const registerSimple = async (username: string) => {
  const response = await authClient.register.simple.$post({
    json: { username }
  });
  
  if (response.status === 201) {
    const data = await response.json();
    console.log('注册成功:', data);
    return data;
  } else {
    const error = await response.json();
    throw new Error(error.message);
  }
};

// 类型定义(可选)
type SimpleRegisterRequest = InferRequestType<typeof authClient.register.simple.$post>['json'];
type SimpleRegisterResponse = InferResponseType<typeof authClient.register.simple.$post, 201>;

// 使用示例
try {
  const result = await registerSimple('myusername');
  localStorage.setItem('token', result.token);
  console.log('用户已注册并登录:', result.user);
} catch (error) {
  console.error('注册失败:', error.message);
}

React示例

import { useState } from 'react';
import { authClient } from '@/client/api';

const SimpleRegisterForm = () => {
  const [username, setUsername] = useState('');
  const [loading, setLoading] = useState(false);

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    setLoading(true);
    
    try {
      const response = await authClient.register.simple.$post({
        json: { username }
      });
      
      if (response.ok) {
        const data = await response.json();
        // 处理登录成功
        localStorage.setItem('token', data.token);
        alert(`注册成功!用户名: ${data.user.username}`);
      } else {
        const error = await response.json();
        alert(`注册失败: ${error.message}`);
      }
    } catch (error) {
      alert('网络错误,请重试');
    } finally {
      setLoading(false);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        value={username}
        onChange={(e) => setUsername(e.target.value)}
        placeholder="输入用户名"
        minLength={3}
        required
      />
      <button type="submit" disabled={loading}>
        {loading ? '注册中...' : '快速注册'}
      </button>
    </form>
  );
};

RPC使用说明

本项目使用Hono RPC客户端进行类型安全的API调用,提供以下优势:

  1. 类型安全: 自动推断请求和响应类型
  2. 代码提示: IDE提供完整的代码补全和类型检查
  3. 错误处理: 统一的错误处理机制
  4. 路径自动补全: 自动生成正确的API路径

类型定义示例

import type { InferResponseType, InferRequestType } from 'hono/client';
import { authClient } from '@/client/api';

// 请求类型定义
type SimpleRegisterRequest = InferRequestType<typeof authClient.register.simple.$post>['json'];

// 响应类型定义
type SimpleRegisterResponse = InferResponseType<typeof authClient.register.simple.$post, 201>;

// 错误响应类型
type ErrorResponse = InferResponseType<typeof authClient.register.simple.$post, 400 | 500>;

功能特点

  1. 自动用户名处理:

    • 如果用户名已存在,自动在末尾添加4位随机数字
    • 例如: "testuser" → "testuser1234"
  2. 默认密码:

    • 系统自动设置默认密码为 "123456"
    • 用户可在后续修改密码
  3. 错误处理:

    • 用户名格式错误返回400状态码
    • 服务器错误返回500状态码
    • 用户名生成失败返回详细错误信息

测试建议

  1. 测试用户名冲突:

    # 第一次注册
    curl -X POST http://localhost:3000/api/v1/auth/register/simple \
     -d '{"username": "testuser"}'
       
    # 第二次注册相同用户名
    curl -X POST http://localhost:3000/api/v1/auth/register/simple \
     -d '{"username": "testuser"}'
    
  2. 验证token有效性:

    # 使用返回的token访问受保护接口
    curl -H "Authorization: Bearer <token>" \
     http://localhost:3000/api/v1/auth/me
    

相关文件

  • 路由实现: src/server/api/auth/register/simple.ts
  • 用户服务: src/server/modules/users/user.service.ts
  • 路由注册: src/server/api/auth/index.ts