Jelajahi Sumber

4s按钮通过token返回给第三方调取获取用户信息进行免登录校验

kely 6 bulan lalu
induk
melakukan
8005c7c64b

+ 23 - 2
app/Http/Controllers/API/AuthController.php

@@ -9,7 +9,10 @@ use App\Http\Requests\API\User\ResetPasswordRequest;
 use App\Mail\ForgetPasswordMailable;
 use App\Models\User;
 use Carbon\Carbon;
+
+use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Mail;
@@ -36,17 +39,35 @@ class AuthController extends Controller
             ]);
         }
 
+        // 创建token
+        $token = $user->createToken('user')->plainTextToken;
+        //用户信息放入缓存
+        $cacheKey = 'auth_token'.$token;
+        Cache::put($cacheKey, [
+            'user_id' => $user->id,
+            'username' => $user->username,
+            'email' => $user->email,
+            'phone' => $user->phone,
+            'token' => $token,
+        ], now()->addHours(2));
+
         return $this->success([
             'data' => [
-                'token' => $user->createToken('user')->plainTextToken,
+                'token' => $token,
             ]
         ]);
     }
 
 
-    public function logout()
+    public function logout(Request $request)
     {
+        //删除缓存token
         Auth::user()->currentAccessToken()->delete();
+        $token = $request->headers->get('Authorization');
+        // 去除Bearer前缀(如果有的话)
+        $token = Str::startsWith($token, 'Bearer ') ? Str::substr($token, 7) : $token;
+
+        Cache::delete('auth_token' . $token);
 
         return $this->noContent();
     }

+ 8 - 1
app/Http/Controllers/API/ProjectController.php

@@ -50,6 +50,7 @@ use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Str;
 use function Nette\Utils\setAttribute;
 use Symfony\Component\HttpFoundation\Exception\BadRequestException;
 
@@ -652,6 +653,12 @@ class ProjectController extends Controller
         ]);
     }
 
-    public function project4s(){
+    public function project4s(Request $request){
+        $token = $request->headers->get('Authorization');
+        // 去除Bearer前缀(如果有的话)
+        $token = Str::startsWith($token, 'Bearer ') ? Str::substr($token, 7) : $token;
+        return $this->success([
+            'data' => 'auth_token' . $token
+        ]);;
     }
 }

+ 17 - 0
app/Http/Controllers/API/UserController.php

@@ -18,9 +18,11 @@ use App\Models\Role;
 use App\Models\User;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 use function Laravel\Prompts\password;
+use function Nette\Utils\isEmpty;
 
 class UserController extends Controller
 {
@@ -197,6 +199,21 @@ class UserController extends Controller
 
     }
 
+    public function auth4sToken(Request $request){
+        $token=$request->get('token');
+        $user=Cache::get($token);
+        if(!empty($user)){
+            return $this->success([
+                'data'=>[
+                    'user'=>$user
+                ]
+            ]);
+        }
+        return $this->success([
+            'data'=>[]
+        ]);;
+    }
+
 //    public function byDepartment(Request $request){
 //        $departmentIds = $request->get("department", []);
 //

+ 2 - 1
routes/api.php

@@ -24,7 +24,7 @@ Route::post("company-file-upload", [API\FileController::class, "companyUpload"])
 //暂时为免登录
 Route::get("file/download/{uuid}/share-file", [API\FileController::class, "downloadShareFile"])
     ->name("file.download-share-file");
-
+Route::get("auth-4s-token",[API\UserController::class,"auth4sToken"]);
 
 
 
@@ -71,6 +71,7 @@ Route::middleware(['auth:sanctum','account.limit'])->group(function () {
     Route::get("all-last-dynamic",[API\ActionController::class,"lastDynamic"]);
     Route::get("approval-items",[API\ApprovalController::class, "publicSearch"]);
 
+
     // Allow access only to admin role
     Route::middleware(['permission', 'role.super-admin', 'system.operation-log'])->group(function () {
         Route::apiResource("company", API\CompanyController::class)->only([