[feat] Flow Tester 사용자 선택 기능 및 API Explorer 인증 공유
- API Explorer와 세션 토큰 공유 (api_explorer_token, api_explorer_user_id) - 사용자 선택 드롭다운 UI 추가 (동일 테넌트 사용자 목록) - HMAC 변수 자동 생성 기능 추가 (\$hmac.exp, \$hmac.signature 등) - VariableBinder에서 선택된 사용자 정보 사용 - 사용자 선택 시 Sanctum 토큰 자동 발급
This commit is contained in:
@@ -25,10 +25,12 @@ public function index(): View
|
||||
->orderByDesc('created_at')
|
||||
->paginate(20);
|
||||
|
||||
// 세션에 저장된 토큰
|
||||
$savedToken = session('flow_tester_token');
|
||||
// 세션에 저장된 토큰 (API Explorer와 공유)
|
||||
$savedToken = session('api_explorer_token');
|
||||
$selectedUserId = session('api_explorer_user_id');
|
||||
$selectedUser = $selectedUserId ? \App\Models\User::find($selectedUserId) : null;
|
||||
|
||||
return view('dev-tools.flow-tester.index', compact('flows', 'savedToken'));
|
||||
return view('dev-tools.flow-tester.index', compact('flows', 'savedToken', 'selectedUser'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -335,12 +337,68 @@ public function runDetail(int $runId): View
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Token Management
|
||||
| Token & User Management (API Explorer와 공유)
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Bearer 토큰 저장
|
||||
* 현재 테넌트의 사용자 목록
|
||||
*/
|
||||
public function users()
|
||||
{
|
||||
$tenantId = auth()->user()->tenant_id;
|
||||
|
||||
$users = \App\Models\User::where('tenant_id', $tenantId)
|
||||
->select(['id', 'name', 'email', 'tenant_id'])
|
||||
->orderBy('name')
|
||||
->limit(100)
|
||||
->get();
|
||||
|
||||
return response()->json($users);
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 선택 (Sanctum 토큰 발급)
|
||||
*/
|
||||
public function selectUser(Request $request)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'user_id' => 'required|integer',
|
||||
]);
|
||||
|
||||
$user = \App\Models\User::find($validated['user_id']);
|
||||
|
||||
if (! $user) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => '사용자를 찾을 수 없습니다.',
|
||||
], 404);
|
||||
}
|
||||
|
||||
// Sanctum 토큰 발급
|
||||
$token = $user->createToken('flow-tester', ['*'])->plainTextToken;
|
||||
|
||||
// 세션에 저장 (API Explorer와 공유)
|
||||
session([
|
||||
'api_explorer_token' => $token,
|
||||
'api_explorer_user_id' => $user->id,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => "'{$user->name}' 사용자로 인증되었습니다.",
|
||||
'user' => [
|
||||
'id' => $user->id,
|
||||
'name' => $user->name,
|
||||
'email' => $user->email,
|
||||
'tenant_id' => $user->tenant_id,
|
||||
],
|
||||
'token_preview' => substr($token, 0, 20).'...',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bearer 토큰 저장 (직접 입력)
|
||||
*/
|
||||
public function saveToken(Request $request)
|
||||
{
|
||||
@@ -348,7 +406,11 @@ public function saveToken(Request $request)
|
||||
'token' => 'required|string',
|
||||
]);
|
||||
|
||||
session(['flow_tester_token' => $validated['token']]);
|
||||
// API Explorer와 같은 세션 키 사용
|
||||
session([
|
||||
'api_explorer_token' => $validated['token'],
|
||||
'api_explorer_user_id' => null, // 직접 입력 시 사용자 정보 없음
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
@@ -361,11 +423,11 @@ public function saveToken(Request $request)
|
||||
*/
|
||||
public function clearToken()
|
||||
{
|
||||
session()->forget('flow_tester_token');
|
||||
session()->forget(['api_explorer_token', 'api_explorer_user_id']);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => '토큰이 초기화되었습니다.',
|
||||
'message' => '인증이 초기화되었습니다.',
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -374,11 +436,19 @@ public function clearToken()
|
||||
*/
|
||||
public function tokenStatus()
|
||||
{
|
||||
$token = session('flow_tester_token');
|
||||
$token = session('api_explorer_token');
|
||||
$userId = session('api_explorer_user_id');
|
||||
$user = $userId ? \App\Models\User::find($userId) : null;
|
||||
|
||||
return response()->json([
|
||||
'has_token' => ! empty($token),
|
||||
'token_preview' => $token ? substr($token, 0, 20).'...' : null,
|
||||
'user' => $user ? [
|
||||
'id' => $user->id,
|
||||
'name' => $user->name,
|
||||
'email' => $user->email,
|
||||
'tenant_id' => $user->tenant_id,
|
||||
] : null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user