首页 > 解决方案 > 在要求用户登录之前,Google Home 检查登录状态

问题描述

我一直在 google home 上开发动作。在实现帮助者意图以访问用户名和电子邮件时,所有这些都实现了登录帮助者意图。现在如何在不要求登录的情况下检查用户是否已经登录。

const {SignIn} = require('actions-on-google');

module.exports = {

  'ask_for_sign_in': (conv) => {
    conv.ask(new SignIn());
  },

  'ask_for_sign_in_confirmation': (conv, params, signin) => {
    if (signin.status !== 'OK') {
      return conv.ask('You need to sign in before using the app.');
    }
    // const access = conv.user.access.token;
    // possibly do something with access token
    return conv.ask('Great! Thanks for signing in.');
  },
};

这里

conv.ask(new SignIn());

将触发登录助手意图。如何在再次要求登录之前检查用户是否已经登录。我有同样的问题

权限助手意图

不是每次用户调用操作时都询问权限,而是如何检查用户是否已经授予权限。

标签: actions-on-googlegoogle-home

解决方案


这取决于您使用的是哪个登录后端,但对于所有后续请求(在此会话和下一个会话中),以下两个请求之一将为 true:

  • 如果您使用自己的 OAuth 服务器,那么您将收到一个身份验证令牌,您可以在conv.user.access.token. 您可以使用 OAuth 服务器的过程对其进行验证并根据此令牌确定用户。

  • 如果您为 Google 助理使用 Google 登录,那么您将在 中收到一个 id 令牌 (in conv.user.profile.token) 和用户的个人资料信息(包括他们的 Google ID)conv.user.profile.payload

权限也不一样。您每次都需要请求名称和位置的权限。但是,如果您使用他们的名称,则可以将其存储在userStorage其中,并且将来会保留。但是,如果他们在移动设备上接听电话,位置可能会发生变化,因此您每次都需要提出此要求。


推荐阅读