This commit is contained in:
root 2025-07-12 18:55:05 +08:00
parent 292f4f5603
commit 04fb72c14c
3 changed files with 17 additions and 52 deletions

View File

@ -26,12 +26,11 @@ def register_user(
password: Optional[str] = typer.Option(None, "--password", "-p", help="密码(不提供则交互式输入)") password: Optional[str] = typer.Option(None, "--password", "-p", help="密码(不提供则交互式输入)")
): ):
"""注册新用户""" """注册新用户"""
response = create_response_handler(str(uuid4()))
try: try:
response = create_response_handler(uuid4())
# 获取密码 # 获取密码
if not password: if not password:
response.error("❌ 密码不能为空") response.error(-32602, "❌ 密码不能为空")
raise typer.Exit(1) raise typer.Exit(1)
# 执行注册 # 执行注册
@ -43,68 +42,31 @@ def register_user(
}) })
response.success(result) response.success(result)
except Exception as e: except Exception as e:
response.error(f"❌ 注册失败: {str(e)}") response.error(-32603, f"❌ 注册失败: {str(e)}")
raise typer.Exit(1) raise typer.Exit(1)
@auth_app.command("login") @auth_app.command("login")
def login_user( def login_user(
username_or_email: str = typer.Argument(..., help="用户名或邮箱"), username_or_email: str = typer.Argument(..., help="用户名或邮箱"),
password: Optional[str] = typer.Option(None, "--password", "-p", help="密码(不提供则交互式输入)"), password: Optional[str] = typer.Option(None, "--password", "-p", help="密码(不提供则交互式输入)")
verbose: bool = typer.Option(False, "--verbose", "-v", help="详细输出"),
json_output: bool = typer.Option(False, "--json", help="JSON格式输出")
): ):
"""用户登录""" """用户登录"""
response = create_response_handler(str(uuid4()))
try: try:
console.print(f"🔐 [bold blue]用户登录[/bold blue]")
console.print(f"用户名/邮箱: {username_or_email}")
# 获取密码 # 获取密码
if not password: if not password:
password = getpass.getpass("请输入密码: ") response.error(-32602, "❌ 密码不能为空")
if not password: raise typer.Exit(1)
console.print("[red]❌ 密码不能为空[/red]")
raise typer.Exit(1)
# 执行登录 # 执行登录
result = auth_api.login({ result = auth_api.login({
"username_or_email": username_or_email, "username_or_email": username_or_email,
"password": password "password": password
}) })
response.success(result)
if result["success"]:
if json_output:
# JSON格式输出
print(json.dumps(result, ensure_ascii=False, indent=2))
else:
console.print(f"\n✅ [bold green]登录成功![/bold green]")
console.print(f"欢迎回来,{result['data']['user']['display_name']}!")
console.print(f"最后登录: {result['data']['user']['last_login']}")
if verbose:
# 显示详细信息
user_info = f"""
🆔 用户ID: {result['data']['user']['id']}
👤 用户名: {result['data']['user']['username']}
📧 邮箱: {result['data']['user']['email']}
🏷 显示名称: {result['data']['user']['display_name']}
🕒 最后登录: {result['data']['user']['last_login']}
🔑 Token: {result['data']['token'][:50]}...
过期时间: {result['data']['expires_at']}
"""
panel = Panel(user_info.strip(), title="登录信息", border_style="green")
console.print(panel)
else:
if json_output:
print(json.dumps(result, ensure_ascii=False, indent=2))
else:
console.print(f"[red]❌ 登录失败: {result['message']}[/red]")
raise typer.Exit(1)
except Exception as e: except Exception as e:
console.print(f"[red]❌ 登录失败: {str(e)}[/red]") response.error(-32603, f"❌ 注册失败: {str(e)}")
raise typer.Exit(1) raise typer.Exit(1)

View File

@ -59,8 +59,13 @@ class EnhancedJSONRPCResponse:
def error(self, code: int, message: str, data: Any = None) -> None: def error(self, code: int, message: str, data: Any = None) -> None:
"""发送错误响应""" """发送错误响应"""
error = JSONRPCError(code=code, message=message, data=data) error_obj = {
response = JSONRPC20Response(error=error, _id=self.request_id) "code": code,
"message": message
}
if data is not None:
error_obj["data"] = data
response = JSONRPC20Response(error=error_obj, _id=self.request_id)
self._send_response(response.data) self._send_response(response.data)
def progress(self, step: str, progress: int, message: str, def progress(self, step: str, progress: int, message: str,

View File

@ -77,8 +77,7 @@ class PythonCliAuth {
const response: PythonCliAuthResponse = await invoke('python_cli_auth_login', { const response: PythonCliAuthResponse = await invoke('python_cli_auth_login', {
request: { request: {
username_or_email: username_or_email, username_or_email: username_or_email,
password: credentials.password, password: credentials.password
json_output: true
} }
}); });
@ -138,7 +137,6 @@ class PythonCliAuth {
email: credentials.email, email: credentials.email,
password: credentials.password, password: credentials.password,
display_name: credentials.displayName, display_name: credentials.displayName,
} }
}); });
console.log({ response }) console.log({ response })