feat: MNG → DEV 자동 로그인 기능 구현

- LoginToken 모델 생성 (토큰 생성 및 URL 생성)
- UserController에 loginToken API 메서드 추가
- DEV_APP_URL 환경설정 추가 (config/services.php)
- 사용자 목록에 "DEV 접속" 버튼 추가
- openDevSite JavaScript 함수 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-20 13:43:13 +09:00
parent d43013b4b4
commit 6525bfd715
6 changed files with 152 additions and 0 deletions

View File

@@ -5,6 +5,7 @@
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreUserRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Models\LoginToken;
use App\Services\UserService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -292,4 +293,47 @@ public function forceDestroy(Request $request, int $id): JsonResponse
'message' => '사용자가 영구 삭제되었습니다.',
]);
}
/**
* DEV 사이트 자동 로그인 토큰 생성
* MNG → DEV 자동 로그인용 One-Time Token 발급
*/
public function loginToken(Request $request, int $id): JsonResponse
{
try {
// 슈퍼관리자 보호: 일반관리자가 슈퍼관리자로 로그인 불가
if (! $this->userService->canAccessUser($id)) {
return response()->json([
'success' => false,
'message' => '사용자를 찾을 수 없습니다.',
], 404);
}
$user = $this->userService->getUserById($id);
if (! $user) {
return response()->json([
'success' => false,
'message' => '사용자를 찾을 수 없습니다.',
], 404);
}
// One-Time Token 생성
$loginToken = LoginToken::createForUser($user->id);
return response()->json([
'success' => true,
'message' => 'DEV 접속 토큰이 생성되었습니다.',
'data' => [
'url' => $loginToken->getAutoLoginUrl(),
'expires_at' => $loginToken->expires_at->toIso8601String(),
],
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'DEV 접속 토큰 생성에 실패했습니다: '.$e->getMessage(),
], 500);
}
}
}