You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart Frog:如何在单个文件中定义多个认证相关路由?

在Dart Frog中集中认证路由到单个文件的实现方法

1. 创建统一的认证处理文件

在项目里新建一个auth.dart(推荐放在lib/routes/api/v1/users/或者lib/src/handlers/目录下,根据你的代码结构调整),把原来三个路由的逻辑都移到这里,通过判断路径来分发请求:

import 'package:dart_frog/dart_frog.dart';

Future<Response> onRequest(RequestContext context) async {
  // 从请求路径里拿到最后一段,判断是login/register/forgot
  final action = context.request.uri.pathSegments.last;

  switch (action) {
    case 'login':
      return _handleLogin(context);
    case 'register':
      return _handleRegister(context);
    case 'forgot':
      return _handleForgotPassword(context);
    default:
      return Response(statusCode: 404, body: '未知的认证接口');
  }
}

// 登录逻辑(原login.dart的代码移过来)
Future<Response> _handleLogin(RequestContext context) async {
  if (context.request.method == HttpMethod.post) {
    // 这里写你的登录处理代码
    return Response(body: '登录成功');
  }
  return Response(statusCode: 405, body: '不允许的请求方法');
}

// 注册逻辑(原register.dart的代码移过来)
Future<Response> _handleRegister(RequestContext context) async {
  if (context.request.method == HttpMethod.post) {
    // 这里写你的注册处理代码
    return Response(body: '注册成功');
  }
  return Response(statusCode: 405, body: '不允许的请求方法');
}

// 找回密码逻辑(原forgot.dart的代码移过来)
Future<Response> _handleForgotPassword(RequestContext context) async {
  if (context.request.method == HttpMethod.post) {
    // 这里写你的找回密码处理代码
    return Response(body: '密码重置链接已发送');
  }
  return Response(statusCode: 405, body: '不允许的请求方法');
}

2. 注册自定义路由映射

在项目根目录新建routes.dart文件,把原来的三个认证路径都指向上面的onRequest函数:

import 'package:dart_frog/dart_frog.dart';
// 注意这里的导入路径要和你实际的auth.dart位置一致
import 'lib/routes/api/v1/users/auth.dart' as auth_handler;

Handler get handler {
  final router = Router()
    // 把三个路径都映射到同一个处理函数
    ..post('/api/v1/users/login', auth_handler.onRequest)
    ..post('/api/v1/users/register', auth_handler.onRequest)
    ..post('/api/v1/users/forgot', auth_handler.onRequest);
    // 如果需要支持其他请求方法(比如GET),可以继续添加对应的映射

  return router;
}

3. 清理原路由文件

删掉原来的api/v1/users/login.dart、api/v1/users/register.dart、api/v1/users/forgot.dart这几个文件,避免和自定义路由产生冲突。

额外说明

  • 这种方式既保留了你原来的路由路径,又把所有认证相关代码集中到了单个文件里,方便维护。
  • 如果需要对不同路径做不同的方法限制,比如登录只允许POST,注册允许POST和GET,可以在路由注册时单独指定,或者在处理函数里判断请求方法。
  • 你也可以把auth.dart放在更上层的目录(比如lib/src/handlers/auth.dart),只要在routes.dart里正确导入就行,这样代码结构会更清晰。

内容的提问来源于stack exchange,提问作者Hamza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:55:32