-- 添加用戶來(lái)源及第三方登錄字段
ALTER TABLE `wa_users`
ADD COLUMN `source` varchar(32) COLLATE utf8mb4_general_ci DEFAULT 'web' COMMENT '用戶來(lái)源(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 '注冊(cè)IP' AFTER `unionid`,
ADD COLUMN `register_time` datetime DEFAULT NULL COMMENT '注冊(cè)時(shí)間' 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
{
/**
小程序用戶注冊(cè)
*/
public function register(Request $request)
{
// 驗(yàn)證請(qǐng)求數(shù)據(jù)
$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注冊(cè)頻率(防批量注冊(cè))
$redisKey = "register:ip:{$ip}";
$registerCount = Redis::get($redisKey) ?: 0;
if ((int)$registerCount >= 5) {
return json(['code' => 403, 'msg' => '注冊(cè)過(guò)于頻繁,請(qǐng)稍后再試']);
}
// 增加IP注冊(cè)計(jì)數(shù)(有效期1小時(shí))
Redis::incr($redisKey);
Redis::expire($redisKey, 3600);
try {
// 創(chuàng)建用戶
$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, // 啟用狀態(tài)
'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' => '注冊(cè)成功',
'data' => ['user_id' => $user->id]
]);
} catch (\Exception $e) {
return json(['code' => 500, 'msg' => '注冊(cè)失敗,請(qǐng)重試']);
}
}
}
2. 路由配置 app/admin/route/route.php
因?yàn)閍pp/admin下沒(méi)有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']);
});
### 完整內(nèi)容如下:
```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');
到這一步,后臺(tái)就打不開(kāi)了,給的步驟還沒(méi)執(zhí)行完
看了下你上一條提問(wèn),能不能學(xué)會(huì)自己寫(xiě)代碼看報(bào)錯(cuò)。。。
namespace plugin\admin\app\controller;
;plugin/admin/config/route.php
就可以;這不接口就通了?