ассистент гугла - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь включить привязку аккаунта в действиях Google. Я выбрал Google и OAuth с Неявным типом связи. В Authorization URL я проверяю запрос и перенаправляю на обработчик oauth от Google. Вот пример кода,

@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

SIGN IN {'@type': 'type.googleapis.com/google.actions.v2.SignInValue', статус: 'ОШИБКА'}

Вот и все, я не могу понять, что происходит не так. Нет достаточно описательной ошибки, которая могла бы объяснить, где это происходит неправильно.

1 Ответ

0 голосов
/ 14 мая 2019

это была глупая ошибка с моей стороны.Проблема заключалась в URL-адресе перенаправления, вместо отправки access_token и других параметров в виде фрагмента URL-адреса, я отправлял их в качестве параметра запроса.Таким образом, изменение генерации маркеров доступа на эту проблему устранило проблему.

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

Хотя, я все еще думаю, что отчеты об ошибках должны быть более полными с конца Google.Это была глупая ошибка, которую нужно было исправить за 10 секунд вместо часов, если ошибка была более значимой, чем Something went wrong

...