提问人:tbmale 提问时间:5/25/2023 更新时间:5/25/2023 访问量:53
Holoviz Panel 自定义身份验证会话串扰
holoviz panel custom auth sessions crosstalk
问:
我正在尝试(并成功)在不使用 OAuth 的情况下实现身份验证方法。 代码在这里:
class ldap_auth(param.Parameterized):
ldap_user=param.String(label="username",)
ldap_pass=param.String(label="password")
ldap_action=param.Action(lambda x: x.param.trigger('ldap_action'),label="Login")
view=param.Parameter
username=pn.widgets.TextInput(name="Username")
username.visible=False
session_id=pn.widgets.TextInput(name="session id")
session_id.visible=False
session_id.jscallback(args={'session_id':session_id},value="console.log('session id:'+session_id.value);window.location=window.location.origin+window.location.pathname+'?bokeh-session-id='+session_id.value")
def __init__(self):
super().__init__()
self.view=pn.Column(self.param.ldap_user,self.param.ldap_pass,self.param.ldap_action,self.session_id,self.username)
# self.infos.visible=False
@param.depends("ldap_action",watch=True)
def login_user(self):
log.info("start login")
for s in pn.state.curdoc.session_context.server_context.sessions:
if s.id==pn.state.curdoc.session_context.id:
if self.ldap_auth(self.ldap_user,self.ldap_pass):
pn.state.cache['users'][s.id]={}
pn.state.cache['users'][s.id]['username']=self.ldap_user
# callback=CustomJS(code="location='%s?bokeh-session-id=%s'"%(pn.state.location.href,s.id))
self.username=pn.state.cache['users'][s.id]['username']
self.session_id.value=s.id
self.view.visible=False
url="%s?bokeh-session-id=%s"%(pn.state.location.href,s.id)
def ldap_auth(self,ldap_user,ldap_pass) -> bool:
log.info("user %s logged in with %s"%(ldap_user,ldap_pass))
return True
它有效,因为我在浏览器刷新时有会话持久性,但是......所有其他浏览器也是如此,即使在其他机器上也是如此!
应用程序启动,应用程序声明如下:pn.io.server.Server({"/":app},...
def app(doc):
l=ldap_auth()
doc.on_session_destroyed(on_session_gone)
pn.state.onload(on_load)
ui=pn.Column(l.view,window, sigma, interactive)
ui.server_doc(doc)
问题:
1)是否有可能拥有一个真正的带面板的多用户应用程序?
2)如果是,是否可以在没有 OAuth 的情况下使用它 - 就像我的实现一样?
答: 暂无答案
评论