我在注册确认电子邮件后向用户发送确认令牌。我遇到的问题是我无法进入确认方法,因为它需要用户登录,一旦他们转到登录方法,我就无法确定如何将它们引导回确认方法。
请注意,代码很大程度上基于(非常好的)书籍Flask Web Development'作者:Grinberg 2014。
我们从新用户注册开始:
@auth.route('/signup', methods=['GET', 'POST'])
def signup():
#validate form and create user
...
token = user.generate_confirmation_token()
send_email(user.email, 'Please Confirm Email Address',
'email/confirm', user=user, token=token)
return redirect(url_for('auth.login'))
return render_template('auth/register.html', form=form)
新用户发送并发送电子邮件,当用户点击电子邮件中的链接时,他们会被发送到此路线:
@auth.route('/confirm/<token>')
@login_required
def confirm(token):
if current_user.confirmed:
return redirect(url_for('main.index'))
if current_user.confirm(token):
#do something here
else:
#message
return redirect(url_for('main.index'))
由于需要登录才能到达确认终点,因此首先会将用户定向到此处:
@auth.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user is not None and user.verify_password(form.password.data):
login_user(user)
return redirect(request.args.get('next') or url_for('main.index'))
return render_template('auth/login.html', form=form)
我遇到的问题是,在用户登录后,他们没有重定向到确认路由,我无法确定如何重定向以确认用户刚登录的情况,以便他们可以回复注册电子邮件链接。有什么想法吗?
答案 0 :(得分:0)
我也从这本书中学习。虽然我不知道你有什么问题,但我可以向你展示一些关键信息来解决你的问题。
然后,您单击它并通过代码@login_required
,因此您重定向到登录页面,但URL不等于通常的登录URL。它有一些不同的东西。 (http://127.0.0.1:5000/auth/login?next=%2Fauth%2Fconfirm%2FeyJleHAiOjE0NjY0ODQwOTAsImFsZyI6IkhTMjU2IiwiaWF0IjoxNDY2NDgwNDkwfQ.eyJjb25maXJtIjo5OX0.npxbWrOYVzX2HYibnDQLNS0FuX-J9XB-TcmZZSPri-8)
接下来,return redirect(request.args.get('next') or url_for('main.index'))
此代码行将获得密钥next=
后的下一个确认网址,并访问确认页。
因此,如果您的网址存在问题,请检查您的网址。 另外,我建议你在pycharm中调试你的代码,因为你可以设置断点和跟踪变量&#39;变化。祝你好运。