AMP

登录

首次访问页面时,可以看到 2 条评论和一个登录按钮。

如果在代码中查找登录按钮,您会发现

<span amp-access="NOT loggedIn" role="button" tabindex="0" amp-access-hide>
  <h5>Please login to comment</h5>
  <button on="tap:amp-access.login-sign-in" class="button-primary comment-button">Login</button>
</span>

amp-access相关的属性的行为取决于amp-access的页面级配置,在本例中,是这个

<script id="amp-access" type="application/json">
  {
    "authorization": "https://ampbyexample.com/samples_templates/comment_section/authorization?rid=READER_ID&url=CANONICAL_URL&ref=DOCUMENT_REFERRER&_=RANDOM",
    "noPingback": "true",
    "login": {
      "sign-in": "https://ampbyexample.com/samples_templates/comment_section/login?rid=READER_ID&url=CANONICAL_URL",
      "sign-out": "https://ampbyexample.com/samples_templates/comment_section/logout"
    },
    "authorizationFallbackResponse": {
      "error": true,
      "loggedIn": false
    }
  }
</script>

授权端点作为 AMPByExample 的一部分进行部署。为页面提供此端点是页面发布者的责任。在此示例案例中,为简单起见,我们实现了基本逻辑,以便在收到此请求时,服务器读取名为ABE_LOGGED_IN的 cookie 的值。如果不存在此 cookie,我们返回包含loggedIn = false的 JSON 响应。因此,用户首次访问页面时,此请求将返回loggedIn = false,并且会显示登录按钮。

再次查看按钮的 HTML 代码,通过使用 on="tap:amp-access.login-sign-in",我们指定在用户点击按钮后,应使用上面 JSON 中指定的 URL

{
    "login": {
    "sign-in": "https://ampbyexample.com/samples_templates/comment_section/login?rid=READER_ID&url=CANONICAL_URL"
  }
}

注意 – 请注意,可以在登录节点内定义不同的 URL,在本例中,我们定义了 sign-in,稍后我们将定义 sign-out

登录页面是一个非 AMP 页面,出于简便考虑,我们在其中填充了登录名和密码值。请注意使用 returnURL 隐藏的输入类型,它由 AMPByExample 服务器通过服务器端模板填充。服务器从名为 return 的参数读取此值,该参数由 AMP 库自动添加到登录 URL 中。

在下面的示例中,一旦您单击登录按钮,return 参数的值就会添加到请求中。您可以使用 Chrome DevTools 控制台并导航到网络选项卡来浏览此值。

一旦 AMPByExample 服务器从登录页面收到 POST 请求,并且登录名和密码正确,它就会将请求重定向到我们上面提到的 returnURL,并附加 #success=true 参数。现在,AMP 运行时可以授权该页面,并最终允许您添加评论。

了解 AMP 运行时执行的操作以及服务器应执行的操作非常重要,因为服务器的实现由页面的发布者负责。

快速回顾一下

  • AMP 运行时会自动将 return 参数添加到登录 JSON 对象内指定的登录请求中
  • AMP 运行时会关闭登录页面,并重定向到 return URL 参数指定的页面
  • 一旦用户单击登录按钮,服务器应协调响应

提示 – 您还可以在 amp-access 中找到有关此流程的更详细说明。