首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cro用户会话被遗忘

Cro用户会话被遗忘
EN

Stack Overflow用户
提问于 2018-07-21 08:33:37
回答 2查看 165关注 0票数 7

我正在努力学习Cro (同时学习Perl6 ) ;)

我的学习应用是基于Cro的文档。我添加了一些身份验证,它确实有效,但用户会话立即被遗忘。

您可以在https://gitlab.com/ecocode/beaverapp上签出代码,转到登录密码,并使用"user“和"pwd”登录。您被重新路由到/(这表明登录成功),但那里的消息是"Current user:-“。因此会话会丢失。

Routes.pm6的相关部分:

代码语言:javascript
复制
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;
    }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-22 00:18:38

您看到的行为实际上是由HTTP/2堆栈内部的cookie处理中的错误引起的。

到目前为止,bug已经修复,OP post中的代码可以正常工作。

票数 7
EN

Stack Overflow用户

发布于 2018-07-21 23:26:05

在cro irc通道上讨论后,这个问题只有在使用https 2时才会出现,所以上面的代码是正确的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51451841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档