我想在某些网址上加上“警卫”。只有当用户登录时才应该访问这些urls。如果没有登录,我希望将用户重定向到登录页面。成功登录后,我希望用户被“重定向”到原始散列。
这是我的路由器
@dom
def outlet: Binding[Node] = {
<div>{
route.state.bind match {
case s: View if UserService.hasRole("admin") => s.render.bind
case s if !UserService.isLoggedIn() => loginPage.render(Some(s.hash)).bind
case _ => <div>Unknown</div>
}
}</div> 然后,loginPage在成功登录后更改窗口哈希:
def login(username: String, password:String, orginalHash: Option[String]) =
UserService.login(username,password).andThen{
case Success(v) =>
println(s"changing hash to $orginalHash")
orginalHash.map(_.substring(1)).foreach(window.location.hash=_)
case Failure(e) => message.value = "Wrong username/password"
}但是,我猜由于哈希实际上没有改变,所以它不会更新页面:
/index.html/#/foobar/index.html/#/foobar)orginalHash的值为#/foobar。location.hash更改为/foobar没有任何作用。有没有办法操纵路由器。是否有一个api来更改当前页面?
发布于 2018-06-26 02:19:29
您正在创建一个数据绑定应用程序,但是系统中的一些可变状态是不可绑定的。
您应该使UserService.isLoggedIn和UserService.hasRole("admin")绑定。
发布于 2018-06-26 06:49:58
感谢@yang-bo的指导,我通过在UserService中使用一个UserService并将模式匹配更改为
@dom
def outlet: Binding[Node] = {
<div>{
(route.state.bind, UserService.user.bind) match {
case (s: View, Some(_)) => s.render.bind
case (s, None) => loginPage.render(Some(s.hash)).bind
case (_,_) => <div>Unknown</div>
}
}</div>
}https://stackoverflow.com/questions/51026190
复制相似问题