我在使用Flask登录current_user
对象和@login_required
装饰器时遇到问题。我认为这与会议没有通过有关。在
目标是让用户单击一个链接,该链接对路由URL进行AJAX调用,该URL将通过SOAP服务提供SSO会话ID。SOAP服务需要传递一个emp_id,该id可以通过current_user.emp_id
属性进行访问。在
我最初尝试在没有@login_required
修饰符的情况下进行AJAX调用,只传递了一条简单的消息,该消息成功返回:
应用程序js
const ssoLinks = document.querySelectorAll('.sso');
ssoLinks.forEach((ssoLink) => {
ssoLink.addEventListener('click', (e) => generateSSOLink(e, ssoLink.id));
});
function generateSSOLink(e, page) {
e.preventDefault();
fetch("/get_bpm_sso_link")
.then(response => response.json())
.then(data => console.log(data))
}
视图.py
^{pr2}$我的下一次尝试是访问current_user
中的emp_id:
视图.py
@app.route('/get_bpm_sso_link')
def get_bpm_sso_link():
data = {
'msg': 'success'
}
print('*'*75)
print(current_user.emp_id)
print('*'*75)
return jsonify(data)
这给了我一个错误:
AttributeError: 'AnonymousUserMixin' object has no attribute 'emp_id'
好的,然后我决定尝试访问初始索引页上的相同emp_id属性(AJAX也在其中),并且能够这样做。听起来像是在AJAX请求期间,Flask登录LoginManager无法识别current_user
的会话。为了进一步说明这一点,我在路由中添加了@login_required
装饰器,JSON响应返回到登录页面的重定向。在
如何让Flask Login在AJAX调用期间识别用户?如果没有,还有哪些库可以无缝地处理用户会话管理和AJAX请求?在
您需要为每个请求登录using request loader as per this example on flask
可能是disable setting the Flask Session cookie
然后使用带有基本身份验证的fetch-add头
理想情况下,由于凭证不是散列的,所以在生产中应该通过https传递
因此,本周我在克利夫兰的pycon2018上做了一些挖掘,发现了一个关于fetchapi的值得注意的话题。默认情况下,API似乎不发送任何用户凭据。为了解决这一问题,可以归结为在API中设置一个选项:
应用程序js
现在,即使使用
@login_required
修饰符,AJAX请求也会击中我的视图。在相关问题 更多 >
编程相关推荐