Holoviz Panel 自定义身份验证会话串扰

holoviz panel custom auth sessions crosstalk

提问人:tbmale 提问时间:5/25/2023 更新时间:5/25/2023 访问量:53

问:

我正在尝试(并成功)在不使用 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 的情况下使用它 - 就像我的实现一样?

Python 会话 Web 应用程序 多用户 holoviz-panel

评论


答: 暂无答案