【问题标题】:google assistant account linking faliure谷歌助理帐号关联失败
【发布时间】:2019-05-14 23:59:58
【问题描述】:

我正在尝试在 google 操作中实现帐户链接。我选择了 Google 和 OAuth 以及 Implicit 链接类型。在Authorization URL 中,我正在验证请求并重定向到google 的oauth 处理程序。这是示例代码,

@Post('/google/actions/authorize')
public async authorizeGoogle(
    @Req() request: Request,
    @Res() response: Response,
    @Body() authorizeRequest: DAuthorizeRequest,
) {
    // tempToken is stored in cookie after login.
    const tempToken = request.cookies['temp-token'];
    if (!tempToken) {
      throw new UnauthorizedException();
    }

    let token: DTemporaryToken;

    try {
      token = await this.jwtService.verifyAsync<DTemporaryToken>(tempToken);
    } catch (err) {
      throw new UnauthorizedException();
    }

    // validate request parameters are as it should be.
    const valid = this.authService.validateGoogleOauthRequest(
      token,
      authorizeRequest,
    );

    if (!valid) {
      throw new UnauthorizedException();
    }

    const user: User = await this.userService.findById(token.user_id);
    const accessToken = await this.authService.generateAccessTokenForGoogle(
      user,
    );

    const redirectUri = `${
      authorizeRequest.redirect_uri
    }?access_token=${accessToken}&error=${false}&token_type=bearer&state=${
      authorizeRequest.state
    }`;
    response.redirect(redirectUri);
}

重定向后出现此错误,

抱歉,出了点问题,所以我无法让你登录。但你可以 请稍后再试。

这是dialogflow 代码

dialogFlowApp.intent(
    'Default Welcome Intent',
    async (conv: DialogflowConversation) => {
      conv.ask(new SignIn('to access your data'));
    },
);

dialogFlowApp.intent('sign_in', (conv, params, signIn) => {
    console.log('SIGN IN', signIn)
    conv.ask('how are you?');
})

signIn 值的控制台日志是

登录 {'@type': 'type.googleapis.com/google.actions.v2.SignInValue',状态:'错误'}

就是这样,我不知道出了什么问题。没有足够的描述性错误来解释哪里出了问题。

【问题讨论】:

    标签: dialogflow-es actions-on-google google-assistant-sdk


    【解决方案1】:

    这是我的一个愚蠢的错误。问题出在重定向 url 中,我没有将 access_token 和其他参数作为 url 片段发送,而是将它们作为查询参数发送。因此,将访问令牌生成更改为此解决了问题。

    const redirectUri = `${
      authorizeRequest.redirect_uri
    }#access_token=${accessToken}&error=${false}&token_type=bearer&state=${
      authorizeRequest.state
    }`;
    

    尽管如此,我仍然认为从谷歌的角度来看,错误报告应该更全面。这是一个愚蠢的错误,如果错误比Something went wrong

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多