Как настроить возврат в AMP-Access? - PullRequest
0 голосов
/ 04 апреля 2019

Теоретически, когда сервер AMPByExample получает запрос POST со страницы входа в систему, если учетные данные верны, он будет перенаправлять запрос к URL returnURL и параметр добавлен success = true. После этого время выполнения AMP может, наконец, авторизовать страницу.

Страница входа следующая:

login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Login Page</title>
    </head>
    <body>
        <form method="post" action="loginauthorization">
        Correo Electronico: <input type="text" name="correo"><br>
        Contraseña: <input type="password" name="clave"><br>

        <input name="returnurl" type="hidden" value="https://cdn.ampproject.org/v0/amp-login-done-0.1.html?url=https%3A%2F%2Fampbyexample.com%2Fplayground%2F">
        
        <input type="submit" value="Ingresar">
        </form>
    </body>
</html>

Как видите, в returnurl это тот же URL-адрес входа в систему AmpByExample, и он не работает.

Я уже пытался создать свой собственный URL следующим образом:

И это тоже не работает.

В сервлете loginauthorization.java я получаю это returnurl и добавляю # success = true (предположительно я должен подтвердить имя пользователя и пароль, но сначала я хочу, чтобы он работал).

loginauthorization.java:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class loginauthorization extends HttpServlet {
    @Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
     try{
      response.setContentType("text/html");
     
//I get the parameters
      String email = request.getParameter("correo");
      String password = request.getParameter("clave");
      String url = request.getParameter("pageurl");
      int ridini = url.indexOf("rid=")+4;
      int ridend = url.indexOf("&url=");
      String rid = url.substring(ridini, ridend);
      String returnurl = request.getParameter("returnurl");
      
//assuming that the username and password are correct, add to the returnurl success true
      returnurl= returnurl + "#success=true";
      
//create a session    
      HttpSession session=request.getSession();
      session.setAttribute("umail",email);
      session.setAttribute("upass",password);
      session.setAttribute("rid",rid);
      session.setAttribute("returnurl",returnurl);
      
      
//redirect after login with the success = true      
      response.sendRedirect(returnurl);
      
    }catch(Exception exp){
       System.out.println(exp);
     }
  }
}

Конфигурация панели следующая:

panel.jsp

<script id="amp-access" type="application/json">
    {
        "authorization": "http://localhost:8084/mypage/jsonauthorization",
        "noPingback": "true",
        "login": {
          "sign-in": "/mypage/login.jsp?rid=READER_ID&url=CANONICAL_URL&return=RETURN_URL",
          "sign-out": "/mypage/endsession"
        },
        "authorizationFallbackResponse": {
            "loggedIn": false
        },
        "type": "server"
    }
  </script>

jsonauthorization печатает {"loggedIn": true} или {"loggedIn": false}:

jsonauthorization.java

import java.io.*;
import javax.servlet.http.*;

public class jsonauthorization extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response){
  try{
      
      response.setContentType("application/json");
      response.setHeader("AMP-Access-Control-Allow-Source-Origin", "http://localhost:8084/mypage");
      PrintWriter pwriter = response.getWriter();
      HttpSession session=request.getSession(false);
      
      if(session != null){
        String email=(String)session.getAttribute("umail");
        if(email==null){
            session.invalidate();
            pwriter.print("{\"loggedIn\":false}");
            
        }else{
            String rid;
            rid = (String) session.getAttribute("rid");
            Cookie AmpCookie = new Cookie("authorized",rid);
            AmpCookie.setPath("/");
            AmpCookie.setDomain("/mypage");
            response.addCookie(AmpCookie);
            pwriter.print("{\"loggedIn\":true}");
        }
      }else{  
        pwriter.print("{\"loggedIn\":false}");
      }
      pwriter.close();
        
  }catch(Exception exp){
      System.out.println(exp);
   }
  }
}

Я ценю ответы, если ошибка не в returnurl, пожалуйста, скажите, где: P

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Я разобрался, не нужно настраивать обратный URL.Просто добавьте скрытый ввод в html, чтобы закрыть окно входа и прочитать URL-адрес json, подтверждающий вход в систему.

Точно так же:

<input name = "returnurl" type = "hidden" value = "https://cdn.ampproject.org/v0/amp-login-done-0.1.html">

Затем, если URL-адрес json будет подтвержденлогин это будет работать.

На самом деле код в порядке, проблема была в файле генератора json.Проблемы с CORS.Необходимо правильно установить заголовок «AMP-Access-Control-Allow-Source-Origin».

0 голосов
/ 12 апреля 2019

Я также пытаюсь выяснить интеграцию AMP с логином / регистрацией. Не уверен, поможет ли это, но я обнаружил, что возвращаемый URL-адрес автоматически добавляется к параметру URL-адреса, поэтому вам не обязательно добавлять его в URL-адрес входа в объекте json инициализации.

...