路由 authRoutes.js 和 gameRoutes.js: 需要处理登录、登出、注册、获取用户信息、创建游戏等。
时间: 2024-09-09 08:07:54 浏览: 39
在Node.js的Koa 2项目中,`authRoutes.js` 和 `gameRoutes.js` 文件通常负责管理应用程序的主要HTTP请求逻辑,特别是与用户认证(Authentication)和游戏相关的操作。
**authRoutes.js:**
- **登录(Login)**: 接受用户名和密码,通过`userService.signIn()`验证用户,成功后生成JWT令牌并返回给客户端。
```javascript
router.post('/login', async (ctx) => {
try {
const { username, password } = ctx.request.body;
const user = await userService.signIn(username, password);
if (user) {
const token = jwtUtils.generateToken(user);
ctx.set('Authorization', `Bearer ${token}`);
ctx.body = { message: 'Logged in successfully' };
} else {
ctx.throw(401, 'Invalid credentials');
}
} catch (err) {
ctx.throw(err.status || 500, err.message);
}
});
```
- **登出(Logout)**: 接收带有JWT的请求头,撤销用户的会话。
```javascript
router.delete('/logout', async (ctx, next) => {
const token = ctx.get('Authorization').split(' ')[1];
jwtUtils.revokeToken(token); // 自定义方法撤销token
ctx.body = { message: 'Logged out successfully' };
next();
});
```
- **注册(Register)**: 接收新用户信息并保存至数据库,可以包含邮箱验证链接。
```javascript
router.post('/register', async (ctx) => {
// 用户注册逻辑...
});
```
**gameRoutes.js:**
- **获取用户信息(Get User Profile)**: 验证JWT并返回用户信息。
```javascript
router.get('/profile', authenticate, async (ctx) => {
const user = await userService.getUserByToken(ctx.state.jwt); // 获取用户凭据
ctx.body = user;
});
```
- **创建游戏(Create Game)**: 接收用户的游戏相关数据,验证权限后将游戏添加到数据库。
```javascript
router.post('/create-game', authenticate, async (ctx) => {
// 创建游戏逻辑...
});
```
`authenticate` 是一个自定义中间件,检查请求头是否包含有效的JWT。在这个过程中,你可以使用`authService`来验证令牌和用户状态。
阅读全文