Browse Source

密码失效返回登录页

cqp 11 months ago
parent
commit
98a8f134ac

+ 4 - 1
app/Http/Controllers/Api/LoginController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
 use App\Service\EmployeeService;
 use App\Service\TokenService;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Log;
 
 //登录
@@ -17,8 +18,10 @@ class LoginController extends BaseController
         list($bool, $return) = $result;
         if(! $bool) return $this->json_return(201,'',$return);
 
+        $password = Hash::make($data['password']);
+
         //生成token
-        $jwtToken = TokenService::getToken($return['id']);
+        $jwtToken = TokenService::getToken($return['id'], $password);
 
         return $this->json_return(200,'', ['id' => $return['id'],'token' => $jwtToken, 'emp_name'=>$return['name']]);
     }

+ 11 - 6
app/Http/Middleware/CheckLogin.php

@@ -26,22 +26,27 @@ class CheckLogin
         if (empty($token)) return response()->json(['code'=>1,'msg'=>'缺少登录凭证','data'=>null]);
 
         //校验token
-        $result = TokenService::verifyToken($token);
-        if ($result <= 0) return response()->json(['code'=>1,'msg'=>TokenService::error[$result],'data'=>null]);
+        $return = TokenService::verifyToken($token);
+        $user_id = $return['user_id'] ?? 0;
+        if ($user_id <= 0) return response()->json(['code'=>1,'msg'=>TokenService::error[$user_id],'data'=>null]);
+
+        //密码
+        $psd = $return['psd'] ?? "";
+        if(empty($psd)) return response()->json(['code'=>1,'msg'=>'账号密码失效,请重新登录','data'=>null]);
 
         //校验用户
-        $checkResult = EmployeeService::checkUser($result);
+        $checkResult = EmployeeService::checkUser($user_id, $psd);
         list($state, $data) = $checkResult;
         if(! $state) return response()->json(['code'=>1,'msg'=>$data,'data'=>null]);
 
         //人员角色
-        $data['role'] = EmployeeService::getPersonRole($result);
+        $data['role'] = EmployeeService::getPersonRole($user_id);
         //角色里所有菜单权限
         $data['role_authority'] = EmployeeService::getPersonRoleQx($data['role']);
         //角色里特殊的按钮
-//        $data['special_button'] = EmployeeService::getSpecialButton($data['role'],$result);
+//        $data['special_button'] = EmployeeService::getSpecialButton($data['role'],$user_id);
         //我的部门
-        $data['depart_range'] = EmployeeService::getLoginDepart($result);
+        $data['depart_range'] = EmployeeService::getLoginDepart($user_id);
         //部门下的人
         $data['man_range'] = EmployeeService::getLoginDepartOfMan($data['depart_range']);
 

+ 3 - 2
app/Service/EmployeeService.php

@@ -1194,12 +1194,13 @@ class EmployeeService extends Service
      * @param $userId
      * @return array
      */
-    public static function checkUser($userId){
+    public static function checkUser($userId,$psd){
         $res = Employee::where('id', $userId)
             ->where('del_time',0)
             ->where('is_admin',Employee::IS_ADMIN)
             ->where('state',Employee::USE)->get()->first();
-        if(empty($res)) return [false, '该账号无法登录,请联系管理员!'];
+        if(empty($res)) return [false, '该账号无法登录,请联系管理员'];
+        if($psd != $res['password']) return [false, '账号密码失效,请重新登录'];
 
         return [true, $res];
     }

+ 4 - 3
app/Service/TokenService.php

@@ -23,13 +23,14 @@ class TokenService
      * Time: 16:43
      * 获取token(登录以后)
      */
-    public static function getToken($userId) :string{
+    public static function getToken($userId, $password) :string{
         $token = array(
             "iat"=> time(), //签发时间
             "nbf"=> time() - 1, //生效时间  (立即生效)
             "exp"=> time() + self::validity,
             "data"=> [
-                'user_id' => $userId
+                'user_id' => $userId,
+                'psd' => $password ?? ""
             ]
         );
         return JWT::encode($token,self::key,"HS256");
@@ -48,7 +49,7 @@ class TokenService
             $decoded = JWT::decode($token,new Key(self::key, "HS256")); //HS256方式,这里要和签发的时候对应
 
             $arr = (array)$decoded;
-            return $arr['data']->user_id;
+            return (array)$arr['data'];
         } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
             return -1;
         } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用