Commit 69a75c6f authored by wangzhengwen's avatar wangzhengwen

用户模块优化 中间件 高校入驻

parent f7bce4d9
<?php
namespace app\api\controller;
use app\api\middleware\Auth;
use app\api\service\TokenService;
use app\api\service\UserService;
use app\api\validate\BusinessValidate;
use app\api\validate\SchoolValidate;
use app\BaseController;
use app\model\project\School as schoolModel;
use app\model\project\User as userModel;
use app\Request;
use think\facade\Cache;
/**
* 入驻
*/
class Settled extends BaseController
{
protected $middleware = [
Auth::class,
];
/**高校入驻
*
*/
public function school(Request $request)
{
$vo = (new SchoolValidate())->goCheck();
if ($vo !== true) {
// return $vo;
}
$data = $request->param();
$token = $request->header('token');
$user = UserService::getUserInfo($token);
if (!$user)
{
return $this->returnMsg('token无效',0);
}
if (schoolModel::where('user_id', $user['id'])->count())
{
return $this->returnMsg('请勿重复提交',0);
}
$data['user_id'] = $user['id'];
schoolModel::create($data);
userModel::where('id',$user['id'])->update(['role'=>3]);
return $this->returnMsg('操作成功',1);
}
/**企业
*
*/
public function business()
{
$vo = (new BusinessValidate())->goCheck();
if ($vo !== true) {
return $vo;
}
}
}
\ No newline at end of file
<?php
namespace app\api\controller;
use app\BaseController;
class Sms extends BaseController
{
}
\ No newline at end of file
......@@ -3,10 +3,12 @@
namespace app\api\controller;
use app\api\service\TokenService;
use app\api\service\UserService;
use app\api\validate\UserValidate;
use app\BaseController;
use app\Request;
use app\model\project\User as userModel;
use think\exception\ValidateException;
class User extends BaseController
{
......@@ -30,8 +32,7 @@ class User extends BaseController
{
return $this->returnMsg('密码不正确',0);
}
$token = TokenService::generateToken($user['id']);
$token = TokenService::generateToken($user['id'],$user->toArray());
$update['token'] = $token;
$update['last_login_time'] = time();
......@@ -50,13 +51,7 @@ class User extends BaseController
}
$data = $request->header();
$is_expires = TokenService::verifyToken($data['token']);
if ($is_expires===false)
{
return $this->returnMsg('token无效',0);
}
$user = userModel::where(['token'=>$data['token']])->find();
$user = UserService::getUserInfo($data['token']);
if (!$user)
{
return $this->returnMsg('token无效',0);
......@@ -74,7 +69,7 @@ class User extends BaseController
}
$data = $request->param();
$is_exit = userModel::where(['mobile' => $data['mobile']])->whereOr(['username'=>$data['name']])->find();
$is_exit = userModel::where(['mobile' => $data['mobile']])->whereOr(['username'=>$data['name']])->count();
if ($is_exit)
{
return $this->returnMsg('用户已存在',0);
......@@ -85,7 +80,7 @@ class User extends BaseController
$user['salt'] = random(4);
$user['password'] = md5($data['password'].$user['salt']);
$user['reg_time'] = time();
$res = Usermodel::insert($user);
$res = userModel::insert($user);
if (!$res)
{
return $this->returnMsg('注册失败',0);
......@@ -140,6 +135,23 @@ class User extends BaseController
}
public function test()
{
try {
// 验证参数
(new UserValidate())->goCheck(['str','code']);
} catch (ValidateException $e) {
return $this->returnMsg($e->getError(),0);
} catch (\Exception $e) {
return json([
'code' => 500,
'msg' => '系统错误',
'data' => null
], 500);
}
}
}
\ No newline at end of file
<?php
namespace app\api\controller;
use app\BaseController;
use app\model\system\SystemArea;
class Util extends BaseController
{
public function getAreaJson()
{
return $this->returnMsg('操作成功',1,SystemArea::getAreaJson());
}
public function uploadFile()
{
}
}
\ No newline at end of file
<?php
return [
// 全局中间件
// \app\api\middleware\Auth::class,
];
\ No newline at end of file
<?php
namespace app\api\middleware;
use app\api\service\TokenService;
use app\BaseController;
use think\facade\Request;
use think\Response;
class Auth extends BaseController
{
public function handle($request, \Closure $next)
{
// 在这里编写你的验证逻辑
$token = $request->header('token');
if (!$this->checkToken($token)) {
return $this->returnMsg('Unauthorized',201);
}
return $next($request);
}
protected function checkToken($token)
{
// 实现你的token验证逻辑
// 返回true或false
if (!$token)
{
return false;
}
$user = TokenService::verifyToken($token);
if ($user===false)
{
return false;
}
return true;
}
}
\ No newline at end of file
......@@ -4,7 +4,7 @@ namespace app\api\service;
use app\BaseController;
class Sms extends BaseController
class SmsService
{
public function sendSms()
......
......@@ -17,7 +17,7 @@ class TokenService
* @param int $userId 用户ID
* @return string Token字符串
*/
public static function generateToken($userId)
public static function generateToken($userId,$user)
{
// 生成随机Token
$token = self::createToken();
......@@ -27,7 +27,8 @@ class TokenService
$tokenData = [
'user_id' => $userId,
'create_time' => time(),
'expire_time' => time() + self::EXPIRE
'expire_time' => time() + self::EXPIRE,
'user'=>$user
];
// 存入缓存
......@@ -36,6 +37,10 @@ class TokenService
return $token;
}
/**
* 验证Token是否有效
* @param string $token Token字符串
......
<?php
namespace app\api\service;
use app\api\validate\UserValidate;
use app\model\project\User as userModel;
use app\Request;
class UserService
{
public static function getUserInfo($token)
{
$user = TokenService::verifyToken($token);
if ($user===false)
{
return false;
}
$user = userModel::where(['token'=>$token])
->field('id,username,mobile,realname,token')
->with(['getSchoolData','getBusinessData'])
->find();
if (!$user)
{
return false;
}
return $user->toArray();
}
}
\ No newline at end of file
<?php
namespace app\api\service;
class UtilService
{
}
\ No newline at end of file
......@@ -25,6 +25,7 @@ class BaseValidate extends Validate
}
if (!$this->check($data)) {
// throw new ValidateException($this->getError());
return json([
'msg' => $this->getError(),
'code' => 0,
......
<?php
namespace app\api\validate;
class BusinessValidate extends BaseValidate
{
protected $rule = [
'name' => 'require',
'type' => 'require',
'scale'=>'require',
'established'=>'require',
'province'=>'require',
'city'=>'require',
'area'=>'require',
'web_url'=>'require',
'main_business'=>'require',
'about_business'=>'require',
'contacts_name'=>'require',
'job'=>'require',
'contacts_phone'=>'require',
'contacts_email'=>'require',
'business_qualification_url_id' => 'require',
'business_industry_url_id' => 'require',
'business_project_url_id' => 'require',
'business_logo_url_id' => 'require',
'more_url_id' => 'require',
];
// protected $message = [
// 'name.require' => '名称必须',
// 'mobile.require' => '手机号不能为空',
// 'mobile.mobile' => '手机号格式不正确',
// 'password.require' => '密码必须',
// 'code.require' => '验证码必须',
// 'token.require' => 'token必须',
// 'str.require' => '必填项不能为空',
// 'confirm_password.checkPasswordEqual' => '两次输入的密码不一致'
// ];
}
\ No newline at end of file
<?php
namespace app\api\validate;
class SchoolValidate extends BaseValidate
{
protected $rule = [
'name' => 'require',
'type' => 'require',
'province'=>'require',
'city'=>'require',
'area'=>'require',
'web_url'=>'require',
'contacts_name'=>'require',
'job'=>'require',
'contacts_phone'=>'require',
'contacts_email'=>'require',
'school_qualification_url_id' => 'require',
'teacher_qualification_url_id' => 'require',
'agreement_url_id' => 'require',
'more_url_id' => 'require',
];
// protected $message = [
// 'name.require' => '名称必须',
// 'mobile.require' => '手机号不能为空',
// 'mobile.mobile' => '手机号格式不正确',
// 'password.require' => '密码必须',
// 'code.require' => '验证码必须',
// 'token.require' => 'token必须',
// 'str.require' => '必填项不能为空',
// 'confirm_password.checkPasswordEqual' => '两次输入的密码不一致'
// ];
}
\ No newline at end of file
<?php
namespace app\model\project;
use think\Model;
class Business extends Model
{
protected $name = 'business';
protected $autoWriteTimestamp = true;
protected $createTime = 'create_time';
}
\ No newline at end of file
<?php
namespace app\model\project;
use think\Model;
class School extends Model
{
protected $name = 'school';
protected $autoWriteTimestamp = true;
protected $createTime = 'create_time';
}
\ No newline at end of file
......@@ -7,6 +7,22 @@ use think\Model;
class User extends Model
{
protected $name = 'user';
protected $autoWriteTimestamp = true;
protected $createTime = 'create_time';
protected $hidden = ['password','token','salt'];
public function getSchoolData()
{
return $this->hasOne(School::class, 'user_id', 'id');
}
public function getBusinessData()
{
return $this->hasOne(Business::class, 'user_id', 'id');
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment