Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已登录用户null Auth0/Spark Java_Java_Model View Controller_Oauth_Auth0_Spark Java - Fatal编程技术网

已登录用户null Auth0/Spark Java

已登录用户null Auth0/Spark Java,java,model-view-controller,oauth,auth0,spark-java,Java,Model View Controller,Oauth,Auth0,Spark Java,我正在尝试将Auth0集成到使用spark java框架的web应用程序中。 问题是,虽然身份验证工作正常,包括回调(我看到在Auth0的网站上创建的新用户,我的网站被重定向),但我无法访问登录的用户信息。我尝试过几种方法,如SessionUtils.getAuth0User(request.raw()),但都不起作用。 例如,在此处提供的教程中: 他们访问登录的用户信息,如下所示: @Override protected void doGet(HttpServletReques

我正在尝试将Auth0集成到使用spark java框架的web应用程序中。 问题是,虽然身份验证工作正常,包括回调(我看到在Auth0的网站上创建的新用户,我的网站被重定向),但我无法访问登录的用户信息。我尝试过几种方法,如
SessionUtils.getAuth0User(request.raw())
,但都不起作用。 例如,在此处提供的教程中: 他们访问登录的用户信息,如下所示:

        @Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    final Auth0User user = SessionUtils.getAuth0User(req);
    if (user != null) {
        req.setAttribute("user", user);
    }
    req.getRequestDispatcher("/WEB-INF/jsp/home.jsp").forward(req, res);
}
我曾尝试使用Spark做过类似的事情,但由于get在Spark中的工作方式有点不同,我会这样做:

port(Integer.valueOf(System.getenv("PORT")));
staticFileLocation("/spark/template/freemarker");
String clientId = System.getenv("AUTH0_CLIENT_ID");
String clientDomain = System.getenv("AUTH0_DOMAIN");
  get("/", (request, response) ->
  {
      Map<String, Object> attributes = new HashMap<>();
      Auth0User user = SessionUtils.getAuth0User(request.raw());
      if(user != null) {
          attributes.put("user", user);
          attributes.put("loggedIn" , true);
      }
      else
          attributes.put("loggedIn" , false);
      attributes.put("clientId" , clientId);
      attributes.put("clientDomain" , clientDomain);
      return new ModelAndView(attributes, "index.ftl");
  }, new FreeMarkerEngine());

我不知道为什么用户每次都被评估为空值,我希望得到一些关于我做错了什么的反馈。谢谢。

为了让您从
SessionUtils.getAuth0User(req)
获取非
null
用户实例,某些代码必须首先调用
SessionUtils.setAuth0User
。当您收到用户成功通过身份验证的确认时,应执行此操作

protected void store(final Tokens tokens, final Auth0User user, final HttpServletRequest req)
{
    SessionUtils.setTokens(req, tokens);
    SessionUtils.setAuth0User(req, user);
}
在您用作参考的
auth0 servlet示例中,这是通过配置将处理对端点执行的请求的。由于
Auth0ServletCallback
为您调用(请参见下面的代码)set user,因此在servlet示例中,您可以成功获得该用户

protected void store(final Tokens tokens, final Auth0User user, final HttpServletRequest req)
{
    SessionUtils.setTokens(req, tokens);
    SessionUtils.setAuth0User(req, user);
}
目前可用的示例(、、和)不包括
spark java
的示例,因此我无法向您推荐任何示例

为了解决这个问题,您必须在
spark java
应用程序中包含额外的逻辑来处理身份验证操作的结果,如果成功,如果您想使用相应的
SessionUtils.getAuth0User
方法。


有关将web应用程序与Auth0集成的一般指导信息,请检查。

您好,请在brouser中显示请求/响应详细信息(屏幕截图)好吗?谢谢,不敢相信我错过了它正在呼叫setAuth0User。在传递给服务器进行最终验证之前,我现在已经开始处理auth客户端。