加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl6 – Cro用户会话被遗忘

发布时间:2020-12-15 21:43:27 所属栏目:大数据 来源:网络整理
导读:我正在努力学习Cro(和Per??l6同时);) 我的学习应用程序基于Cro的文档.我添加了一些可行的身份验证,但用户会话立即被遗忘. 您可以在https://gitlab.com/ecocode/beaverapp查看代码 转到登录pasge并使用“user”和“pwd”登录.您将被重新路由到/(表示登录成功)
我正在努力学习Cro(和Per??l6同时);)

我的学习应用程序基于Cro的文档.我添加了一些可行的身份验证,但用户会话立即被遗忘.

您可以在https://gitlab.com/ecocode/beaverapp查看代码
转到登录pasge并使用“user”和“pwd”登录.您将被重新路由到/(表示登录成功),但消息中有“当前用户: – ”.因此会话迷失了.

Routes.pm6的相关部分:

class UserSession does Cro::HTTP::Auth {
    has $.username is rw;

    method logged-in() {
        defined $!username;
    }
}

my $routes = route {
    subset LoggedIn of UserSession where *.logged-in;

    get -> UserSession $s {
        content 'text/html',"Current user: {$s.logged-in ?? $s.username !! '-'}";
    }

    get -> LoggedIn $user,'users-only' {
        content 'text/html',"Secret page just for *YOU*,$user.username()";
    }

    get -> 'login' {
        content 'text/html',q:to/HTML/;
            <form method="POST" action="/login">
              <div>
                Username: <input type="text" name="username" />
              </div>
              <div>
                Password: <input type="password" name="password" />
              </div>
              <input type="submit" value="Log In" />
            </form>
            HTML
    }

    post -> UserSession $user,'login' {
        request-body -> (:$username,:$password,*%) {
            if valid-user-pass($username,$password) {
                $user.username = $username;
                redirect '/',:see-other;
            }
            else {
                content 'text/html',"Bad username/password";
            }
        }
    }

    sub valid-user-pass($username,$password) {
        # Call a database or similar here
        return $username eq 'user' && $password eq 'pwd';
    }
}

sub routes(Beaverapp $beaverapp) is export {
    route {
        # Apply middleware,then delegate to the routes.
        before Cro::HTTP::Session::InMemory[UserSession].new;
        delegate <*> => $routes;
    }
}

我认为问题是由于中间件会话管理不起作用.我该怎么纠正这个?或者问题可能是由于其他原因造成的?

解决方法

您看到的行为确实是由HTTP / 2堆栈中的cookie处理错误引起的.

至于现在,错误是固定的,OP帖子中的代码可以正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读