SmsRecipient/app/controller/UserController.php
mao a4e5648147 feat: 添加短信应用基本功能- 新增应用管理、短信中心、用户登录注册等功能页面
- 实现应用创建、删除、短信搜索、分页等功能
- 添加用户登录、注册、修改密码等账户管理功能
- 新增通用消息显示模板
2025-04-30 18:00:08 +08:00

277 lines
11 KiB
PHP

<?php
namespace app\controller;
use app\model\SmsContent;
use app\model\User;
use app\model\UsersLog;
use app\model\UsersToken;
use support\Request;
use support\View;
class UserController
{
public function regedit(Request $request)
{
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
return view('user/regedit');
}
public function login(Request $request)
{
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
return view('user/login');
}
public function logout(Request $request)
{
session(['nickname' => null, 'user_id' => null]);
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
return msg('退出成功', "您可以继续操作。");
}
public function enter(Request $request)
{
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
$username = $request->post('username', '');
$password = $request->post('password', '');
if (empty($username) || empty($password)) {
return msg('请输入用户名或密码', "请输入用户名或密码后继续。", "/user/login", "返回");
}
$user = User::where('username', $username)->first();
if (!$user) {
return msg('用户不存在', "请输入正确的用户名后继续。", "/user/login", "返回");
}
if (!password_verify($password, $user->password)) {
return msg('密码错误', "请输入正确的密码后继续。", "/user/login", "返回");
}
session([
'nickname' => $user->nickname,
'user_id' => $user->id
]);
$logs = new UsersLog();
$logs->user_id = $user->id;
$logs->ip = $request->getRemoteIp() . ":" . $request->getRemotePort();
$logs->save();
return msg('登录成功', "您可以继续操作。");
}
public function password(Request $request): \support\Response
{
if (session('nickname', "未登录") === "未登录") return msg('请先登录', "请登录后继续。", "/user/login", '立即登录');
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
return view('user/password');
}
public function update(Request $request)
{
// 修改密码
if (session('nickname', "未登录") === "未登录") return msg('请先登录', "请登录后继续。", "/user/login", '立即登录');
$password = $request->post('password', '');
$repassword = $request->post('confirmPassword', '');
if (empty($password)) {
return msg('请输入密码', "请输入密码后继续。", "/user/password", "返回");
}
if (strlen($password) < 6 || strlen($password) > 16) {
return msg('密码长度为6-16位', "请输入6-16位密码后继续。", "/user/password", "返回");
}
if ($password !== $repassword) {
return msg('两次密码不一致', "请输入两次密码后继续。", "/user/password", "返回");
}
$user = User::where('id', session('user_id'))->first();
$user->password = password_hash($password, PASSWORD_DEFAULT);
$user->save();
session(['nickname' => null, 'user_id' => null]);
return msg('修改成功', "请登录后继续。", "/user/login", "登录");
}
public function store(Request $request)
{
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
$agreement = $request->post('agreement', 'off');
if ($agreement !== 'on') {
return msg('请先同意用户协议', "请勾选用户协议后继续。", "/user/regedit", "返回");
}
$username = $request->post('username', '');
$nickname = $request->post('nickname', '');
$nickname = empty($nickname) ? '用户' . uniqid() : $nickname;
$password = $request->post('password', '');
$repassword = $request->post('confirmPassword', '');
if (empty($username) || empty($password)) {
return msg('请输入用户名或密码', "请输入用户名或密码后继续。", "/user/regedit", "返回");
}
if (strlen($username) < 4 || strlen($username) > 16) {
return msg('用户名长度为4-16位', "请输入4-16位用户名后继续。", "/user/regedit", "返回");
}
if (strlen($password) < 6 || strlen($password) > 16) {
return msg('密码长度为6-16位', "请输入6-16位密码后继续。", "/user/regedit", "返回");
}
if ($password !== $repassword) {
return msg('两次密码不一致', "请输入两次密码后继续。", "/user/regedit", "返回");
}
$user = User::where('username', $username)->first();
if ($user) {
return msg('用户已存在', "请输入其他用户名后继续。", "/user/regedit", "返回");
}
$user = new User();
$user->username = $username;
$user->nickname = $nickname;
$user->password = password_hash($password, PASSWORD_DEFAULT);
$user->save();
return msg('注册成功', "请登录后继续。", "/user/login", "登录");
}
public function token(Request $request)
{
if (session('nickname', "未登录") === "未登录") return msg('请先登录', "请登录后继续。", "/user/login", '立即登录');
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
$user = User::where('id', session('user_id'))->first();
if (!$user) {
session(['nickname' => null, 'user_id' => null]);
return msg('用户不存在', "请重新登录后继续。", "/user/login", "登录");
}
$users_token = UsersToken::where('user_id', $user->id)->first();
if (!$users_token) {
$users_token = new UsersToken();
$users_token->user_id = $user->id;
$uid_md5 = md5($user->id . uniqid());
$users_token->token = strtoupper($user->id) . $uid_md5;
$users_token->save();
}
return view('user/token', [
'token' => $users_token->token,
'updateTime' => $users_token->updated_at
]);
}
public function tokenUpdate(Request $request)
{
if (session('nickname', "未登录") === "未登录") return msg('请先登录', "请登录后继续。", "/user/login", '立即登录');
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
$user = User::where('id', session('user_id'))->first();
if (!$user) {
session(['nickname' => null, 'user_id' => null]);
return msg('用户不存在', "请重新登录后继续。", "/user/login", "登录");
}
$users_token = UsersToken::where('user_id', $user->id)->first();
if (!$users_token) {
$users_token = new UsersToken();
$users_token->user_id = $user->id;
$uid_md5 = md5($user->id . uniqid());
$users_token->token = strtoupper($user->id) . $uid_md5;
$users_token->save();
return msg('更新成功', "请使用新的密钥访问所有应用。", "/user/token", "我的密钥");
}
$users_token->token = strtoupper($user->id) . md5($user->id . uniqid());
$users_token->save();
return msg('更新成功', "请使用新的密钥访问所有应用。", "/user/token", "我的密钥");
}
public function cleanStart(Request $request)
{
if (session('nickname', "未登录") === "未登录") return msg('请先登录', "请登录后继续。", "/user/login", '立即登录');
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
$user = User::where('id', session('user_id'))->first();
if (!$user) {
session(['nickname' => null, 'user_id' => null]);
return msg('用户不存在', "请重新登录后继续。", "/user/login", "登录");
}
$smsContent = SmsContent::where('user_id', $user->id)->get();
foreach ($smsContent as $item) {
$item->delete();
}
return msg('清除成功', "所有短信已清除。", "/user/clean", "返回");
}
public function clean(Request $request)
{
if (session('nickname', "未登录") === "未登录") return msg('请先登录', "请登录后继续。", "/user/login", '立即登录');
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
$user = User::where('id', session('user_id'))->first();
if (!$user) {
session(['nickname' => null, 'user_id' => null]);
return msg('用户不存在', "请重新登录后继续。", "/user/login", "登录");
}
return view('user/clean');
}
public function logs(Request $request)
{
if (session('nickname', "未登录") === "未登录") return msg('请先登录', "请登录后继续。", "/user/login", '立即登录');
View::assign(["nickname" => session('nickname', "未登录")]);
View::assign([
"header" => view('common/header')->rawBody(),
"footer" => view('common/footer')->rawBody()
]);
$user = User::where('id', session('user_id'))->first();
if (!$user) {
session(['nickname' => null, 'user_id' => null]);
return msg('用户不存在', "请重新登录后继续。", "/user/login", "登录");
}
$logs = UsersLog::where('user_id', $user->id)->orderBy('id', 'desc')->paginate(100);
return view('user/logs', [
'logs' => $logs
]);
}
}