You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Supabase Python库中实现邮箱OTP的verify_otp验证?

Flask后端结合Supabase实现邮箱OTP验证的正确方式

你的核心问题在于verify_otp调用时的type参数配置错误,以及异常处理的针对性不足。以下是修正后的完整实现:

正确的Verify OTP路由实现

from supabase import AuthError  # 导入Supabase专用认证错误类

@stylist_bp.route('/verify-otp', methods=['POST'])
def verify_otp():
    data = request.get_json()
    email = data.get('email')
    otp = data.get('otp')

    if not email or not otp:
        return jsonify({'error': '邮箱和OTP验证码不能为空'}), 400

    try:
        # 关键修正:type参数使用'signup'而非'email'
        verify_response = supabase.auth.verify_otp({
            'email': email,
            'token': otp,
            'type': 'signup'  # 必须与生成OTP时的认证类型严格匹配
        })

        # 提取核心会话信息返回给前端,用于后续接口鉴权
        session = verify_response.data.session
        return jsonify({
            'message': 'OTP验证成功',
            'session': {
                'access_token': session.access_token,
                'refresh_token': session.refresh_token,
                'user_id': session.user.id
            }
        }), 200
    except AuthError as e:
        # 精准捕获Supabase认证类错误,比如OTP无效、过期、不匹配
        return jsonify({'error': e.message}), 401
    except Exception as e:
        # 兜底处理其他未知异常
        return jsonify({'error': str(e)}), 500

关键参数说明

  • type: 'signup':这个值必须和你生成OTP时调用的接口类型完全匹配。如果是注册场景发送的验证码,就用signup;如果是魔法登录链接用magiclink,密码恢复用recovery,以此类推。
  • email:用户提交的邮箱,必须和接收OTP的邮箱完全一致。
  • token:用户输入的6位OTP验证码。

生成OTP时的对应要求

确保你的send-otp路由是注册场景的逻辑,示例参考:

@stylist_bp.route('/send-otp', methods=['POST'])
def send_otp():
    data = request.get_json()
    email = data.get('email')

    try:
        # 发送注册用OTP,密码设为占位值(邮箱OTP注册无需真实密码)
        supabase.auth.sign_up({
            'email': email,
            'password': 'temp-placeholder'
        })
        return jsonify({'message': 'OTP验证码已发送至你的邮箱'}), 200
    except AuthError as e:
        return jsonify({'error': e.message}), 400

若你是调用send_otp方法发送验证码,同样要指定type='signup',保证前后类型统一。

内容的提问来源于stack exchange,提问作者Ayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:07:31