整合register端口进入login端口
This commit is contained in:
76
app.py
76
app.py
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user