Files
yusheng-php/application/api/model/UserToken.php

102 lines
3.9 KiB
PHP
Raw Normal View History

2025-08-07 20:21:47 +08:00
<?php
namespace app\api\model;
use think\Db;
use think\Model;
class UserToken extends Model
{
// 检测登录
public function check_login_token($token)
{
if (empty($token)) {
2025-08-12 11:16:48 +08:00
return ['code' => 301, 'msg' => '登录失效!', 'data' =>null];
2025-08-07 20:21:47 +08:00
}
$user_token = $this->where('token', $token)->find();
if (empty($user_token)) {
2025-08-12 11:16:48 +08:00
return ['code' => 301, 'msg' => '登录失效!!', 'data' => null];
2025-08-07 20:21:47 +08:00
}
if ($user_token['expiretime'] < time()) {
2025-08-12 11:16:48 +08:00
return ['code' => 301, 'msg'=> '登录失效!!!', 'data' => null];
2025-08-07 20:21:47 +08:00
}
$block1 = db::name('block')->where(['type' => 1,'type_text' => $user_token['user_id']])->find();
$userState = db::name('user')->where(['id' => $user_token['user_id']])->value('status');
2025-12-16 16:11:21 +08:00
if(isset($block1) || $userState == 2){
2026-01-08 11:59:42 +08:00
return ['code' => 301, 'msg'=> '账号已被封禁,请联系管理员','data' => null];
2025-08-07 20:21:47 +08:00
}
$login_device = request()->header('deviceId');
$block2 = db::name('block')->where(['type' => 2,'type_text' => $login_device])->find();
if(isset($block2)){
2026-01-08 11:59:42 +08:00
return ['code' => 301, 'msg'=> '设备已被封禁,请联系管理员','data' => null];
2025-08-07 20:21:47 +08:00
}
$Ip = request()->ip();
$block3 = db::name('block')->where(['type' => 3,'type_text' => $Ip])->find();
if(isset($block3)){
2026-01-08 11:59:42 +08:00
return ['code' => 301, 'msg'=> 'IP已被封禁请联系管理员','data' => null];
2025-08-07 20:21:47 +08:00
}
return ['code' => 1, 'msg'=> '成功','data' => $user_token['user_id']];
}
//更新token
2025-12-24 16:21:07 +08:00
public function update_tokens($user_id)
2025-08-07 20:21:47 +08:00
{
$token =md5($user_id . date('YmdHis') . generateRandom(32));
$expiretime = time() + 3600 * 24 * 7;
$data_token = $this->where('user_id', $user_id)->find();
if(empty($data_token)){
$data_token = [];
$data_token['user_id'] = $user_id;
$data_token['token'] = $token;
$data_token['expiretime'] = $expiretime;
if(!($this->save($data_token))){
return ['code' => 0, 'msg'=> 'token更新失败'];
}
}else{
if(!($this->where('user_id', $user_id)->update(['token' => $token, 'expiretime' => $expiretime]))){
return ['code' => 0, 'msg'=> 'token更新失败'];
}
}
return $token;
}
2025-12-24 16:21:07 +08:00
//更新token
public function update_token($user_id)
{
$tokenString = md5($user_id . date('YmdHis') . generateRandom(32));
// 4. 核心操作将Token与用户ID关联并存入Redis配置的独立库
// 参数说明Token::set(token字符串, 用户ID, ‘有效期(秒))
$result = \app\common\library\Token::set($tokenString, $user_id, 3600 * 24 * 7);
$expiretime = time() + 3600 * 24 * 7;
$data_token = $this->where('user_id', $user_id)->find();
if(empty($data_token)){
$data_token = [];
$data_token['user_id'] = $user_id;
$data_token['token'] = $tokenString;
$data_token['expiretime'] = $expiretime;
if(!($this->save($data_token))){
return ['code' => 0, 'msg'=> 'token更新失败'];
}
}else{
2026-01-17 23:12:04 +08:00
//查询有多少个信息
$user_token = db::name('user_token')->where('user_id', $user_id)->select();
if(count($user_token) > 1){
//删除多余的token
foreach ($user_token as $key => $value) {
if($value['id'] != $data_token['id']){
$this->where('id', $value['id'])->delete();
}
}
}
2025-12-24 16:21:07 +08:00
if(!($this->where('user_id', $user_id)->update(['token' => $tokenString, 'expiretime' => $expiretime]))){
return ['code' => 0, 'msg'=> 'token更新失败'];
}
}
return $result ? $tokenString : null;
}
2025-08-07 20:21:47 +08:00
}