Avi*_*Das 6 python flask flask-login flask-wtforms
我正在使用flask_login登录并注销应用程序,但重定向回到上一页似乎不起作用.我使用flask.views和login_required作为需要用户登录的视图的装饰器.但是,当我尝试访问需要登录的/ path时,它会重定向到/ login而不是/ login?next =/path这意味着request.get.args("next")是None.
我在我的蓝图中使用登录需要的烧瓶视图,如下所示:
from flask import Blueprint, render_template, request, redirect, url_for
from flask.views import MethodView
from models import Post
from flask.ext.mongoengine.wtf import model_form
from flask.ext.login import login_required
posts_app = Blueprint('posts_app', __name__, template_folder='templates', static_folder='static', static_url_path='/static')
class ListView(MethodView):
decorators = [login_required]
def get(self):
posts = Post.objects.all()
print posts
return render_template('posts/list.html', posts=posts)
posts_app.add_url_rule('/', view_func=ListView.as_view('list'))
Run Code Online (Sandbox Code Playgroud)
在一个单独的蓝图中,我正在实现身份验证:
from flask import Blueprint, render_template, request, current_app, flash, redirect, url_for
from forms import LoginForm, RegisterForm, ForgotForm
from libs.User import User
from flask.ext.login import login_user, login_required, logout_user, confirm_login
from app import login_manager, flask_bcrypt
auth_login = Blueprint('auth_login', __name__, template_folder='templates')
@auth_login.route('/login', methods=["GET", "POST"])
def login():
if request.method == "POST" and "email" in request.form:
email = request.form["email"]
userObj = User()
user = userObj.get_by_email_w_password(email)
if user and user.is_active() and flask_bcrypt.check_password_hash(user.password, request.form["password"]):
remember = request.form.get("remember", "no") == "yes"
if login_user(user, remember=remember):
flash("Logged In!")
return redirect(request.args.get('next') or url_for('index'))
else:
flash("Unable to log you in")
form = LoginForm(request.form)
return render_template('forms/login.html', form=form)
Run Code Online (Sandbox Code Playgroud)
任何熟悉登录需要装饰的人都可以提供一些建议吗?谢谢!
Avi*_*Das 11
发现了什么出了问题.在我的身份验证蓝图中,我重写了@ login_manager.unauthorized_handler
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect('/login')
Run Code Online (Sandbox Code Playgroud)
而我真的需要这样做:
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect('/login?next=' + request.path)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9393 次 |
| 最近记录: |