Merge branch 'develop' into lms
正在显示
7 个修改的文件
包含
117 行增加
和
68 行删除
| @@ -15,7 +15,7 @@ use App\Models\AyrShare\AyrShare as AyrShareModel; | @@ -15,7 +15,7 @@ use App\Models\AyrShare\AyrShare as AyrShareModel; | ||
| 15 | class AyrShareController extends BaseController | 15 | class AyrShareController extends BaseController |
| 16 | { | 16 | { |
| 17 | //生成名称前缀 | 17 | //生成名称前缀 |
| 18 | - const TITLE = 'global_so_'; | 18 | + const TITLE = 'globalso'; |
| 19 | /** | 19 | /** |
| 20 | * @name :(社交列表)lists | 20 | * @name :(社交列表)lists |
| 21 | * @author :lyh | 21 | * @author :lyh |
| @@ -82,7 +82,7 @@ class AyrShareController extends BaseController | @@ -82,7 +82,7 @@ class AyrShareController extends BaseController | ||
| 82 | public function create_account(AyrShareRequest $ayrShareRequest,AyrShareLogic $ayrShareLogic){ | 82 | public function create_account(AyrShareRequest $ayrShareRequest,AyrShareLogic $ayrShareLogic){ |
| 83 | $ayrShareRequest->validated(); | 83 | $ayrShareRequest->validated(); |
| 84 | $param = [ | 84 | $param = [ |
| 85 | - 'title'=>self::TITLE.$this->user['project_id'].':'.$this->param['name'], | 85 | + 'title'=>self::TITLE . ':' . $this->user['project_id'] . '-' . $this->param['name'], |
| 86 | ]; | 86 | ]; |
| 87 | //发送请求注册社交用户 | 87 | //发送请求注册社交用户 |
| 88 | $ayrShareHelper = new AyrShareHelper(); | 88 | $ayrShareHelper = new AyrShareHelper(); |
| @@ -9,9 +9,11 @@ use App\Models\AyrShare\AyrRelease as AyrReleaseModel; | @@ -9,9 +9,11 @@ use App\Models\AyrShare\AyrRelease as AyrReleaseModel; | ||
| 9 | use App\Models\AyrShare\AyrShare as AyrShareModel; | 9 | use App\Models\AyrShare\AyrShare as AyrShareModel; |
| 10 | use App\Models\Project\Project; | 10 | use App\Models\Project\Project; |
| 11 | use App\Models\Project\Project as ProjectModel; | 11 | use App\Models\Project\Project as ProjectModel; |
| 12 | +use App\Models\SmsLog; | ||
| 12 | use App\Models\User\ProjectMenu as ProjectMenuModel; | 13 | use App\Models\User\ProjectMenu as ProjectMenuModel; |
| 13 | use App\Models\User\ProjectRole as ProjectRoleModel; | 14 | use App\Models\User\ProjectRole as ProjectRoleModel; |
| 14 | use App\Models\User\User as UserModel; | 15 | use App\Models\User\User as UserModel; |
| 16 | +use App\Models\User\User; | ||
| 15 | use Carbon\Carbon; | 17 | use Carbon\Carbon; |
| 16 | use Illuminate\Http\Request; | 18 | use Illuminate\Http\Request; |
| 17 | use Illuminate\Support\Facades\Cache; | 19 | use Illuminate\Support\Facades\Cache; |
| @@ -29,12 +31,12 @@ class ComController extends BaseController | @@ -29,12 +31,12 @@ class ComController extends BaseController | ||
| 29 | */ | 31 | */ |
| 30 | public function login(){ | 32 | public function login(){ |
| 31 | $this->request->validate([ | 33 | $this->request->validate([ |
| 32 | - 'mobile'=>['required'], | 34 | + 'mobile'=>['required', 'regex:/^1[3-9]\d{9}$/'], |
| 33 | 'password'=>['required'], | 35 | 'password'=>['required'], |
| 34 | ],[ | 36 | ],[ |
| 35 | 'mobile.required'=>'电话号码必须填写', | 37 | 'mobile.required'=>'电话号码必须填写', |
| 36 | 'password.required'=>'内容必须填写', | 38 | 'password.required'=>'内容必须填写', |
| 37 | - 'mobile.max' => 'mobile不大于12字符.', | 39 | + 'mobile.regex' => '请输入正确的手机号码', |
| 38 | ]); | 40 | ]); |
| 39 | $userModel = new UserModel(); | 41 | $userModel = new UserModel(); |
| 40 | $res = $userModel->login($this->param); | 42 | $res = $userModel->login($this->param); |
| @@ -120,60 +122,37 @@ class ComController extends BaseController | @@ -120,60 +122,37 @@ class ComController extends BaseController | ||
| 120 | $this->response('success'); | 122 | $this->response('success'); |
| 121 | } | 123 | } |
| 122 | 124 | ||
| 123 | - | ||
| 124 | /** | 125 | /** |
| 125 | - * @name : (测试定时任务)检测用户是否无操作记录 | ||
| 126 | - * @author :lyh | ||
| 127 | - * @method :post | ||
| 128 | - * @time :2023/5/12 14:55 | 126 | + * 发送登录短信 |
| 127 | + * @param Request $request | ||
| 128 | + * @return \Illuminate\Http\JsonResponse | ||
| 129 | */ | 129 | */ |
| 130 | - protected function ceShi(){ | ||
| 131 | - $this->error = 0; | ||
| 132 | - //获取所有ayr_share用户 | ||
| 133 | - $ayr_share_model = new AyrShareModel(); | ||
| 134 | - $ayr_share_list = $ayr_share_model->list($this->map); | ||
| 135 | - if(!empty($ayr_share_list)){ | ||
| 136 | - foreach ($ayr_share_list as $k => $v){ | ||
| 137 | - //查询当前用户是否有未推送的博文 | ||
| 138 | - $ayr_release = new AyrReleaseModel(); | ||
| 139 | - $release_info = $ayr_release->read(['schedule_date'=>['>',date('Y-m-d H:i:s',time())],'share_id'=>$v['id']]); | ||
| 140 | - //有推文时,直接跳出循环 | ||
| 141 | - if($release_info !== false){ | ||
| 142 | - continue; | ||
| 143 | - } | ||
| 144 | - //查看用户是否在一周内有发送博客 | ||
| 145 | - $start_at = Carbon::now()->modify('-7 days')->toDateString(); | ||
| 146 | - $end_at = Carbon::now()->toDateString(); | ||
| 147 | - $release_info = $ayr_release->read(['created_at'=>['between',[$start_at,$end_at]]]); | ||
| 148 | - //有发送博文,则跳出循环 | ||
| 149 | - if($release_info == false){ | ||
| 150 | - continue; | ||
| 151 | - } | ||
| 152 | - //删除用户第三方配置 | ||
| 153 | - $ayr_share_helper = new AyrShareHelper(); | ||
| 154 | - $data_profiles = [ | ||
| 155 | - 'title'=>$v['title'], | ||
| 156 | - 'profileKey'=>$v['profile_key'] | ||
| 157 | - ]; | ||
| 158 | - $res = $ayr_share_helper->deleted_profiles($data_profiles); | ||
| 159 | - if($res['status'] == 'fail'){ | ||
| 160 | - $this->error++; | ||
| 161 | - continue; | ||
| 162 | - } | ||
| 163 | - //更新数据库 | ||
| 164 | - $data = [ | ||
| 165 | - 'title'=>null, | ||
| 166 | - 'bind_plat_from'=>null, | ||
| 167 | - 'profile_key'=>null, | ||
| 168 | - 'ref_id'=>null, | ||
| 169 | - ]; | ||
| 170 | - $res = $ayr_share_model->edit($data,['id'=>$v['id']]); | ||
| 171 | - if($res == false){ | ||
| 172 | - $this->error++; | ||
| 173 | - } | ||
| 174 | - } | ||
| 175 | - } | ||
| 176 | - return $this->error; | 130 | + public function sendLoginSms(Request $request) |
| 131 | + { | ||
| 132 | + $this->request->validate([ | ||
| 133 | + 'mobile'=>['required', 'regex:/^1[3-9]\d{9}$/'], | ||
| 134 | + ],[ | ||
| 135 | + 'mobile.required' => '手机号码不能为空', | ||
| 136 | + 'mobile.regex' => '请输入正确的手机号码', | ||
| 137 | + ]); | ||
| 138 | + $mobile = $request->input('mobile'); | ||
| 139 | + $user = User::where(['mobile' => $mobile])->first(); | ||
| 140 | + if (empty($user)) { | ||
| 141 | + return $this->response('请输入正确的手机号码!', Code::USER_LOGIN_ERROE); | ||
| 142 | + } | ||
| 143 | + $last_sms = SmsLog::getLastLog($mobile, SmsLog::TYPE_LOGIN); | ||
| 144 | + if ($last_sms && $last_sms->use = SmsLog::USE_USABLE && time() - strtotime($last_sms->created_at) < 60) { | ||
| 145 | + return $this->response('请不要重复发送短信!', Code::USER_LOGIN_ERROE); | ||
| 146 | + } | ||
| 147 | + $template = config('alisms.login_sms_temp'); | ||
| 148 | + $code['code'] = rand(100000,999999); | ||
| 149 | + $ali_sms = new AliSms(); | ||
| 150 | + $send = $ali_sms->sendSms(strval($mobile), $template, $code); | ||
| 151 | + if (empty($send->Code) && $send->Code != 'OK') { | ||
| 152 | + return $this->response('发送失败, 请稍后重试!', Code::USER_LOGIN_ERROE); | ||
| 153 | + } | ||
| 154 | + SmsLog::createLog($mobile, $code['code']); | ||
| 155 | + return $this->response('success'); | ||
| 177 | } | 156 | } |
| 178 | 157 | ||
| 179 | } | 158 | } |
app/Models/SmsLog.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * Created by PhpStorm. | ||
| 4 | + * User: zhl | ||
| 5 | + * Date: 2023/6/3 | ||
| 6 | + * Time: 17:42 | ||
| 7 | + */ | ||
| 8 | +namespace App\Models; | ||
| 9 | + | ||
| 10 | +use Illuminate\Database\Eloquent\Model; | ||
| 11 | + | ||
| 12 | +class SmsLog extends Model | ||
| 13 | +{ | ||
| 14 | + //设置关联表名 | ||
| 15 | + protected $table = 'gl_sms_log'; | ||
| 16 | + | ||
| 17 | + const TYPE_REGISTER = 'register'; | ||
| 18 | + const TYPE_LOGIN = 'login'; | ||
| 19 | + const TYPE_NOTICE = 'notice'; | ||
| 20 | + | ||
| 21 | + const USE_USABLE = 0; | ||
| 22 | + const USE_DISABLE = 1; | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 创建日志 | ||
| 26 | + * @param $mobile | ||
| 27 | + * @param $code | ||
| 28 | + * @param $type | ||
| 29 | + * @param string $content | ||
| 30 | + * @return mixed | ||
| 31 | + */ | ||
| 32 | + public static function createLog($mobile, $code, $type = self::TYPE_LOGIN, $content = '') | ||
| 33 | + { | ||
| 34 | + $created_at = $updated_at = date('Y-m-d H:i:s'); | ||
| 35 | + $array = compact('type', 'mobile', 'code', 'content', 'updated_at', 'created_at'); | ||
| 36 | + return self::insert($array); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + /** | ||
| 40 | + * 查询最后一条日志 | ||
| 41 | + * @param $mobile | ||
| 42 | + * @param $type | ||
| 43 | + * @return mixed | ||
| 44 | + */ | ||
| 45 | + public static function getLastLog($mobile, $type) | ||
| 46 | + { | ||
| 47 | + return self::where(compact('type', 'mobile'))->orderBy('id', 'desc')->first(); | ||
| 48 | + } | ||
| 49 | +} |
| @@ -5,6 +5,7 @@ namespace App\Models\User; | @@ -5,6 +5,7 @@ namespace App\Models\User; | ||
| 5 | //use Illuminate\Contracts\Auth\MustVerifyEmail; | 5 | //use Illuminate\Contracts\Auth\MustVerifyEmail; |
| 6 | use App\Helper\Common; | 6 | use App\Helper\Common; |
| 7 | use App\Models\Base; | 7 | use App\Models\Base; |
| 8 | +use App\Models\SmsLog; | ||
| 8 | use App\Models\User\ProjectRole as ProjectRoleModel; | 9 | use App\Models\User\ProjectRole as ProjectRoleModel; |
| 9 | use Illuminate\Database\Eloquent\Factories\HasFactory; | 10 | use Illuminate\Database\Eloquent\Factories\HasFactory; |
| 10 | use Illuminate\Notifications\Notifiable; | 11 | use Illuminate\Notifications\Notifiable; |
| @@ -59,18 +60,21 @@ class User extends Base | @@ -59,18 +60,21 @@ class User extends Base | ||
| 59 | * @method | 60 | * @method |
| 60 | */ | 61 | */ |
| 61 | public function login($param){ | 62 | public function login($param){ |
| 62 | - if(!isset($param['login_method'])){ | ||
| 63 | - //密码加密 | ||
| 64 | - $param['password'] = base64_encode(md5($param['password'])); | ||
| 65 | - $info = $this->read(['mobile'=>$param['mobile'] | ||
| 66 | - ,'password'=>$param['password'],'status'=>0], ['id','mobile','role_id','token','name','project_id']); | ||
| 67 | - }else{ | ||
| 68 | - //TODO::验证验证码是否正确 | ||
| 69 | - $info = $this->read(['mobile'=>$param['mobile']],['*']); | ||
| 70 | - } | 63 | + //验证账号密码 |
| 64 | + $password = base64_encode(md5($param['password'])); | ||
| 65 | + $info = $this->read(['mobile'=>$param['mobile'],'password'=>$password,'status'=>0], ['id','mobile','role_id','token','name','project_id']); | ||
| 66 | + if($info === false){ | ||
| 67 | + //账号密码没通过时,验证验证码 | ||
| 68 | + $info = $this->read(['mobile'=>$param['mobile'],'status'=>0], ['id','mobile','role_id','token','name','project_id']); | ||
| 71 | if($info === false){ | 69 | if($info === false){ |
| 72 | return false; | 70 | return false; |
| 73 | } | 71 | } |
| 72 | + //验证验证码是否准备 | ||
| 73 | + $last_sms = SmsLog::getLastLog($param['mobile'], SmsLog::TYPE_LOGIN); | ||
| 74 | + if($param['password'] != $last_sms->code){ | ||
| 75 | + return false; | ||
| 76 | + } | ||
| 77 | + } | ||
| 74 | //当前用户角色是否被禁用 | 78 | //当前用户角色是否被禁用 |
| 75 | $projectRoleModel = new ProjectRoleModel(); | 79 | $projectRoleModel = new ProjectRoleModel(); |
| 76 | $role_info = $projectRoleModel->read(['id'=>$info['role_id'],'status'=>0]); | 80 | $role_info = $projectRoleModel->read(['id'=>$info['role_id'],'status'=>0]); |
| @@ -119,5 +123,4 @@ class User extends Base | @@ -119,5 +123,4 @@ class User extends Base | ||
| 119 | Cache::pull($info['token']); | 123 | Cache::pull($info['token']); |
| 120 | return true; | 124 | return true; |
| 121 | } | 125 | } |
| 122 | - | ||
| 123 | } | 126 | } |
| @@ -15,7 +15,8 @@ | @@ -15,7 +15,8 @@ | ||
| 15 | "laravel/sanctum": "^2.11", | 15 | "laravel/sanctum": "^2.11", |
| 16 | "laravel/tinker": "^2.5", | 16 | "laravel/tinker": "^2.5", |
| 17 | "mongodb/mongodb": "^1.6", | 17 | "mongodb/mongodb": "^1.6", |
| 18 | - "phpoffice/phpspreadsheet": "^1.28" | 18 | + "phpoffice/phpspreadsheet": "^1.28", |
| 19 | + "mrgoon/aliyun-sms": "^2.0" | ||
| 19 | }, | 20 | }, |
| 20 | "require-dev": { | 21 | "require-dev": { |
| 21 | "facade/ignition": "^2.5", | 22 | "facade/ignition": "^2.5", |
config/alisms.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * Created by PhpStorm. | ||
| 4 | + * User: zhl | ||
| 5 | + * Date: 2023/6/3 | ||
| 6 | + * Time: 17:39 | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +return [ | ||
| 10 | + 'access_key' => env('ALIYUN_SMS_AK'), // accessKey | ||
| 11 | + 'access_secret' => env('ALIYUN_SMS_AS'), // accessSecret | ||
| 12 | + 'sign_name' => env('ALIYUN_SMS_SIGN_NAME'), // 签名 | ||
| 13 | + // login | ||
| 14 | + 'login_sms_temp' => 'SMS_272545773', | ||
| 15 | + // 注册 | ||
| 16 | + 'register_sms_temp' => 'SMS_272430790', | ||
| 17 | +]; |
| @@ -293,7 +293,7 @@ Route::middleware(['bloginauth'])->group(function () { | @@ -293,7 +293,7 @@ Route::middleware(['bloginauth'])->group(function () { | ||
| 293 | //无需登录验证的路由组 | 293 | //无需登录验证的路由组 |
| 294 | Route::group([], function () { | 294 | Route::group([], function () { |
| 295 | Route::any('/login', [\App\Http\Controllers\Bside\ComController::class, 'login'])->name('login'); | 295 | Route::any('/login', [\App\Http\Controllers\Bside\ComController::class, 'login'])->name('login'); |
| 296 | - Route::any('/', [\App\Http\Controllers\Bside\ComController::class, 'ceShi'])->name('ce_shi'); | 296 | + Route::any('/sendLoginSms', [\App\Http\Controllers\Bside\ComController::class, 'sendLoginSms'])->name('sendLoginSms'); |
| 297 | Route::get('/file/download', [\App\Http\Controllers\Bside\FileController::class, 'download'])->name('file_download'); | 297 | Route::get('/file/download', [\App\Http\Controllers\Bside\FileController::class, 'download'])->name('file_download'); |
| 298 | Route::any('/image/{hash}/{w?}/{h?}', [\App\Http\Controllers\File\ImageController::class,'index'])->name('image_show'); | 298 | Route::any('/image/{hash}/{w?}/{h?}', [\App\Http\Controllers\File\ImageController::class,'index'])->name('image_show'); |
| 299 | Route::any('/file_hash/{hash}', [\App\Http\Controllers\File\FileController::class,'index'])->name('file_show'); | 299 | Route::any('/file_hash/{hash}', [\App\Http\Controllers\File\FileController::class,'index'])->name('file_show'); |
-
请 注册 或 登录 后发表评论