当前位置: 首页 > 知识库问答 >
问题:

vertx身份验证和会话管理

凤经国
2023-03-14

我正在使用Vert。后端为x,前端为AngularJS。

Vert. x服务器使用POST和GET方法接收HTTP操作。不知何故,我为每个请求获取不同的会话ID。

以下是来自我的LoginFormHandler类句柄例程的代码片段。

authProvider.authenticate(authInfo, res -> {
  if (res.succeeded()) {
    Session session = context.session();
    io.vertx.ext.auth.User user = res.result();
    session.put("user", user);
    req.response().setStatusCode(204).end("user Login success");
    //...
  }
//...
}

我正在将用户对象放入当前会话中。然后我移动到新页面并向Vert. x服务器发送POST请求。在那个POST处理程序中,我正在尝试获取会话对象:

Session session = context.session();
io.vertx.ext.auth.User user = session.get("user");

我没有得到用户。此外,当我打印会话ID时,我为两个会话获得不同的值。

我在线程的启动例程中有以下代码。

router.route().handler(CookieHandler.create());
router.route().handler(
                SessionHandler.create(LocalSessionStore.create(vertx)));
AuthProvider ap = new MyAuthProvier();
router.route().handler(UserSessionHandler.create(ap));
AuthHandler basicAuthHandler = BasicAuthHandler.create(ap);
router.route("/Services/rest/user/auth").handler(MyFormLoginHandler.create(ap));
router.route("/Services/*").handler(basicAuthHandler);

共有1个答案

索嘉胜
2023-03-14

尝试使用新的处理程序进行身份验证。

router.route("/Services/rest/user/auth").handler(new MyFormLoginHandler());
router.route("/Services/*").handler(basicAuthHandler);

实现如下处理程序

class MyFormLoginHandler implements Handler<RoutingContext> {
public void handle(RoutingContext routingContext) {

    HttpServerResponse response = routingContext.response();
    Session session = routingContext.session();

    routingContext.request().bodyHandler(new Handler<Buffer>() {
        public void handle(Buffer buf)
        {
            ....
            for (User u : users){
               if (u.getPassword().equals(passwd)){
                  session.put("user", u.getUserName());
                  response.setStatusCode(204).end("User Authenticated");
                  break;
               }
            }
        };
    });
}

}

从会话访问用户。

class TestRequest implements Handler<RoutingContext> {
    public void handle(RoutingContext routingContext) {
        Session session = routingContext.session();
        routingContext.request().bodyHandler(new Handler<Buffer>() {
            public void handle(Buffer buf) {
                .....
                    String userName = session.get("user");
                .....
            };
        });
    }
}
 类似资料:
  • 这可能涉及到会话cookie、服务器端会话存储以及一些会话APIendpoint,通过身份验证的web UI可以访问这些endpoint来获取当前用户信息,以帮助个性化或甚至确定客户端的角色/能力。服务器仍将强制执行保护对数据访问的规则当然,UI将仅仅使用这些信息来定制体验。 将其视为使用公共API的任何第三方客户端,并使用类似于OAuth的某种令牌系统进行身份验证。客户端UI将使用此令牌机制来验

  • 在身份验证等情况下,与会话相比,使用JWTs有什么优势? 它是作为独立方法使用还是在会话中使用?

  • 我遵循了认证教程,但遇到了一些问题。 它不能将变量传递给导入的函数。

  • 我正在尝试根据Laravel5.3中的API对用户进行身份验证。它不起作用。一旦用户在登录后重定向,身份验证就不会持久。 路由配置如下: 在LoginController.php我正在使用 成功保存在文件中的登录后,路由的会话不会启动。 所以在路径上:

  • 我在ASP.NET中使用窗体身份验证。我已将超时设置为1分钟。一旦我登录,如果经过身份验证,我将被重定向到主页(homepage.aspx)。这很好用。如果我远离网站,1分钟后回来,并试图访问任何其他页面,我将按预期重定向到登录页面。我的问题是,如果我回来做一些回发或刷新,那么只有我被重定向到登录页面,否则我将停留在同一个页面。如果我在1分钟后回来,我应该做什么才能登录页面出现在屏幕上。

  • 问题内容: 我正在尝试将我的电话号码与我的电子邮件密码身份验证相关联。所以我使用以下步骤建立我的注册: 用户输入电子邮件地址和密码。 然后我打电话 那么我需要将当前帐户与电话号码相关联,因此我正在使用 但是,我没有看到任何链接。在我的Firebase控制台中创建的2个帐户和当前用户的详细信息中只有电话号码。当我再次使用电子邮件和密码登录并检查用户详细信息时,电话号码不存在! 请在下面找到我的代码: