-- 添加用户来源及第三方登录字段
ALTER TABLE `wa_users`
ADD COLUMN `source` varchar(32) COLLATE utf8mb4_general_ci DEFAULT 'web' COMMENT '用户来源(web/miniprogram/app)' AFTER `status`,
ADD COLUMN `openid` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '小程序openid' AFTER `source`,
ADD COLUMN `unionid` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '小程序unionid' AFTER `openid`,
ADD COLUMN `register_ip` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '注册IP' AFTER `unionid`,
ADD COLUMN `register_time` datetime DEFAULT NULL COMMENT '注册时间' AFTER `register_ip`;
-- 添加索引
ALTER TABLE `wa_users`
ADD INDEX `idx_source` (`source`),
ADD UNIQUE INDEX `idx_openid` (`openid`),
ADD INDEX `idx_register_time` (`register_time`);
<?php
namespace app\admin\controller;use app\admin\model\WaUsers;
use support\Request;
use Respect\Validation\Validator as v;
use Webman\Redis;
class Miniprogram
{
/**
小程序用户注册
*/
public function register(Request $request)
{
// 验证请求数据
$validator = v::key('username', v::stringType()->length(4, 20))
->key('password', v::stringType()->length(6, 32));
try {
$validator->assert($request->post());
} catch (\Exception $e) {
return json(['code' => 400, 'msg' => $e->getMessage()]);
}
$username = $request->post('username');
$password = $request->post('password');
$ip = $request->getRealIp();
// 检查用户名是否已存在
if (WaUsers::where('username', $username)->exists()) {
return json(['code' => 400, 'msg' => '用户名已存在']);
}
// 检查IP注册频率(防批量注册)
$redisKey = "register:ip:{$ip}";
$registerCount = Redis::get($redisKey) ?: 0;
if ((int)$registerCount >= 5) {
return json(['code' => 403, 'msg' => '注册过于频繁,请稍后再试']);
}
// 增加IP注册计数(有效期1小时)
Redis::incr($redisKey);
Redis::expire($redisKey, 3600);
try {
// 创建用户
$user = WaUsers::create([
'username' => $username,
'password' => password_hash($password, PASSWORD_DEFAULT),
'nickname' => $username,
'source' => 'miniprogram',
'register_ip' => $ip,
'register_time' => date('Y-m-d H:i:s'),
'join_time' => date('Y-m-d H:i:s'),
'join_ip' => $ip,
'status' => 1, // 启用状态
'role' => 1, // 普通用户角色
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
return json([
'code' => 200,
'msg' => '注册成功',
'data' => ['user_id' => $user->id]
]);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => '注册失败,请重试']);
}
}
}
2. 路由配置 app/admin/route/route.php
因为app/admin下没有route文件夹,route。php在/www/wwwroot/webman/plugin/admin/config目录下,所以在/www/wwwroot/webman/plugin/admin/config/route.php添加了
```php
use support\Route;
// 小程序接口
Route::group('/api/miniprogram', function () {
Route::post('/register', [\app\admin\controller\Miniprogram::class, 'register']);
});
### 完整内容如下:
```php
<?php
use plugin\admin\app\controller\AccountController;
use plugin\admin\app\controller\DictController;
use Webman\Route;
use support\Request;
use support\Route;
// 小程序接口
Route::group('/api/miniprogram', function () {
Route::post('/register', [\app\admin\controller\Miniprogram::class, 'register']);
});
Route::any('/app/admin/account/captcha/{type}', [AccountController::class, 'captcha']);
Route::any('/app/admin/dict/get/{name}', [DictController::class, 'get']);
Route::fallback(function (Request $request) {
return response($request->uri() . ' not found' , 404);
}, 'admin');
到这一步,后台就打不开了,给的步骤还没执行完
看了下你上一条提问,能不能学会自己写代码看报错。。。
namespace plugin\admin\app\controller;;plugin/admin/config/route.php就可以;这不接口就通了?
谢谢
还是你有空
一两分钟的事,就靠网友贡献的错误示例来增加自己的项目经验[手动滑稽]