作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置 Flask-Login,但在使用 Internet Explorer 和 Safari 时遇到问题。
从登录页面登录后,这些浏览器上的用户被重定向回登录页面,并且日志显示用户未登录。
这在 Firefox、Chrome 和 Opera 上正常工作:用户被重定向到/top/页面。
这是我设置 login_manager 和登录 View 的方法:
login_manager = LoginManager(app)
login_manager.login_view = "login"
login_manager.login_message = u"Please log in to access this page."
#login_manager.refresh_view = "reauth"
#salt for hashing etc.
SALT = u""
# # Initialize extensions
# mail.init_app(app)
# db.init_app(app)
# login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
"""
Loads user from Database
"""
try:
user = User.objects(id=user_id).first()
except Exception as inst:
app.logger.error("Could not login user %s: %s" % (type(inst), type))
return None
if user is None:
app.logger.error("No user found for %s" % user_id)
return None
return AppUser(user)
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated():
app.logger.info("already logged in")
return redirect(request.args.get("next") or url_for('top'))
if request.method == 'POST':
e_mail = request.form['e_mail'].lower()
password = request.form['password']
app.logger.debug(password)
app.logger.debug(e_mail)
if e_mail is not None and password is not None:
#get user from database
try:
start = time.time()
users = User.objects(email=e_mail)
user = users.first()
end = time.time()
app.logger.info("Getting user took %f.5 seconds." % (end - start))
except Exception as inst:
app.logger.error("Could not login user %s: %s" % (type(inst), type))
raise abort(500)
if user is None:
app.logger.error("No user found for %s" % e_mail)
flash('Username or password are not correct.', 'error')
else:
#check password
m = hashlib.sha256()
m.update(password.encode("UTF-8"))
m.update(SALT.encode("UTF-8"))
if m.hexdigest() == user.password:
app.logger.debug("Login %s" % e_mail)
login_user(AppUser(user))
app.logger.error("Args: %s" % request.args.get("next"))
return redirect(request.args.get("next") or url_for('top'))
else:
flash('Username or password are not correct.', 'error')
app.logger.error("not logged in")
return render_template('login.html')
最佳答案
这只是一个 session 名称。它包含一个空格,Safari 和 IE 显然不支持该空格。
关于python - Flask @login_required 不适用于 IE 和 Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24230582/
我是一名优秀的程序员,十分优秀!