flask注册成功后如何直接跳转到认证页面?

  1. 现在注册玩之后跳转到登录界面,然后登录后在进行认证,这一步我感觉多余,注册成功后怎么直接跳转到认证页面,并且是当前注册用户登录?相当于注册成功后省略登录认证这一步。
登录:

@auth.route('/login',methods=['GET','POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')
    if username:
        user = User.query.filter_by(username=username).first()
        if user is not None and user.verify_passwd(password):
            login_user(user)
            return redirect(url_for('main.index'))
        else:
            error = '用户名不存在或密码错误.'
            return render_template('auth/login.html',error=error)
    return render_template('auth/login.html',success=success)

注册:

@auth.route('/register',methods=['GET','POST'])
def register():
    error = []
    if request.method == 'POST':
        try:
            new_user = User(username=request.form.get('username'),email=request.form.get('email'),password=request.form.get('confirm_password'))
            db.session.add(new_user)
            db.session.commit()
        except:
            error.append('用户名或邮箱已被注册.')
            db.session.rollback()
        else:
            token = new_user.tokens()
            send_email(new_user.email, 'Confirm Your Account','auth/email/confirm', user=new_user, token=token)
            global success
            success = '一封认证邮件已发至您的邮箱,登陆后完成认证即可访问.'
            return  redirect(url_for('auth.login'))
    return render_template('auth/register.html',error=error)


用户认证:

@auth.route('/confirm/<token>')
@login_required
def confirm(token):
    if current_user.status:
        return redirect(url_for('main.index'))
    if current_user.loosen_tokens(token):
        db.session.commit()
        return redirect(url_for('main.index'))
阅读 5.1k
1 个回答

也许你是想 register 成功后把 login 的事情做完:
即把register()中的

        else:
            token = new_user.tokens()
            send_email(new_user.email, 'Confirm Your Account','auth/email/confirm', user=new_user, token=token)
            global success
            success = '一封认证邮件已发至您的邮箱,登陆后完成认证即可访问.'
            return  redirect(url_for('auth.login'))

换成login成功的代码:

        else:
            token = new_user.tokens()
            send_email(new_user.email, 'Confirm Your Account','auth/email/confirm', user=new_user, token=token)
            global success
            success = '一封认证邮件已发至您的邮箱,登陆后完成认证即可访问.'
            # 登陆
            login_user(new_user)
            return redirect(url_for('main.index'))

但是问题是你这里的register成功后还要进入一个邮件认证环节, 如果用户没有通过邮件认证, 那么用户是不能登录的. 而原来的代码return redirect(url_for('auth.login'))让页面重定向到登陆页面. 就是为了让用户有时间去邮件认证, 邮件认证完毕之后再重新登陆. 所以这个环节必不可少, 除非你让前端用js一直轮询, 直到确定通过了邮件认证然后自动跳转到main.index.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题