整合register端口进入login端口

This commit is contained in:
2025-10-28 13:45:45 +08:00
parent c33181a689
commit 8787d5ddb7

76
app.py
View File

@@ -2679,13 +2679,16 @@ def wechat_callback():
return redirect('/home?bind=failed') return redirect('/home?bind=failed')
user = None user = None
is_new_user = False
if unionid: if unionid:
user = User.query.filter_by(wechat_union_id=unionid).first() user = User.query.filter_by(wechat_union_id=unionid).first()
if not user: if not user:
user = User.query.filter_by(wechat_open_id=openid).first() user = User.query.filter_by(wechat_open_id=openid).first()
if not user: if not user:
# 创建新用户 # 创建新用户(自动注册)
is_new_user = True
# 先清理微信昵称 # 先清理微信昵称
raw_nickname = user_info.get('nickname', '微信用户') raw_nickname = user_info.get('nickname', '微信用户')
# 创建临时用户实例以使用清理方法 # 创建临时用户实例以使用清理方法
@@ -2709,27 +2712,33 @@ def wechat_callback():
db.session.add(user) db.session.add(user)
db.session.commit() db.session.commit()
# 更新最后登录时间 # 更新 wechat_qr_sessions 状态,供前端轮询检测
user.update_last_seen()
# 设置session
session.permanent = True
session['user_id'] = user.id
session['username'] = user.username
session['logged_in'] = True
session['wechat_login'] = True # 标记是微信登录
# Flask-Login 登录
login_user(user, remember=True)
# 清理微信session仅登录/注册流程清理;绑定流程在上方已处理,不在此处清理)
if state in wechat_qr_sessions: if state in wechat_qr_sessions:
# 仅当不是绑定流程,或没有模式信息时清理 session_item = wechat_qr_sessions[state]
if not wechat_qr_sessions[state].get('mode'): # 不是绑定模式才更新为登录状态
del wechat_qr_sessions[state] if not session_item.get('mode'):
session_item['status'] = 'register_ready' if is_new_user else 'login_ready'
session_item['user_info'] = {
'user_id': user.id,
'is_new_user': is_new_user
}
# 直接跳转到首页 # 返回一个简单的成功页面(前端轮询会检测到状态变化)
return redirect('/home') return '''
<html>
<head><title>授权成功</title></head>
<body>
<h2>微信授权成功</h2>
<p>请返回原页面继续操作...</p>
<script>
// 尝试关闭窗口(如果是弹窗的话)
setTimeout(function() {
window.close();
}, 1000);
</script>
</body>
</html>
''', 200
except Exception as e: except Exception as e:
print(f"❌ 微信登录失败: {e}") print(f"❌ 微信登录失败: {e}")
@@ -2747,16 +2756,16 @@ def login_with_wechat():
return jsonify({'success': False, 'error': 'session_id不能为空'}), 400 return jsonify({'success': False, 'error': 'session_id不能为空'}), 400
# 验证session # 验证session
session = wechat_qr_sessions.get(session_id) wechat_session = wechat_qr_sessions.get(session_id)
if not session: if not wechat_session:
return jsonify({'success': False, 'error': '会话不存在或已过期'}), 400 return jsonify({'success': False, 'error': '会话不存在或已过期'}), 400
# 检查session状态 # 检查session状态
if session['status'] not in ['login_ready', 'register_ready']: if wechat_session['status'] not in ['login_ready', 'register_ready']:
return jsonify({'success': False, 'error': '会话状态无效'}), 400 return jsonify({'success': False, 'error': '会话状态无效'}), 400
# 检查是否有用户信息 # 检查是否有用户信息
user_info = session.get('user_info') user_info = wechat_session.get('user_info')
if not user_info or not user_info.get('user_id'): if not user_info or not user_info.get('user_id'):
return jsonify({'success': False, 'error': '用户信息不完整'}), 400 return jsonify({'success': False, 'error': '用户信息不完整'}), 400
@@ -2768,18 +2777,33 @@ def login_with_wechat():
# 更新最后登录时间 # 更新最后登录时间
user.update_last_seen() user.update_last_seen()
# 清除session # 设置 Flask session
session.permanent = True
session['user_id'] = user.id
session['username'] = user.username
session['logged_in'] = True
session['wechat_login'] = True # 标记是微信登录
# Flask-Login 登录
login_user(user, remember=True)
# 判断是否为新用户
is_new_user = user_info.get('is_new_user', False)
# 清除 wechat_qr_sessions
del wechat_qr_sessions[session_id] del wechat_qr_sessions[session_id]
# 生成登录响应 # 生成登录响应
response_data = { response_data = {
'success': True, 'success': True,
'message': '登录成功' if session['status'] == 'login_ready' else '注册并登录成功', 'message': '注册成功' if is_new_user else '登录成功',
'isNewUser': is_new_user,
'user': { 'user': {
'id': user.id, 'id': user.id,
'username': user.username, 'username': user.username,
'nickname': user.nickname or user.username, 'nickname': user.nickname or user.username,
'email': user.email, 'email': user.email,
'phone': user.phone,
'avatar_url': user.avatar_url, 'avatar_url': user.avatar_url,
'has_wechat': True, 'has_wechat': True,
'wechat_open_id': user.wechat_open_id, 'wechat_open_id': user.wechat_open_id,