# certLoginWithKakaoTalk method Null safety

Future<CertTokenInfo> certLoginWithKakaoTalk(

1. {List<Prompt>? prompts,
2. required String state,
3. List<String>? channelPublicIds,
4. List<String>? serviceTerms,
5. String? nonce}

)

앱투앱(App-to-App) 방식 카카오톡 인증 로그인

카카오톡을 실행하고, 카카오톡에 연결된 카카오계정으로 사용자 인증 후 동의 및 전자서명을 거쳐 `CertTokenInfo` 반환

동의 화면 요청 시 추가 상호작용을 요청하고자 할 때는 `prompts` 전달, 사용할 수 있는 옵션의 종류는 Prompt 참고 ID 토큰 재생 공격 방지를 위한 검증 값은 `nonce` 전달. 임의의 문자열, ID 토큰 검증 시 사용 전자서명 원문은 `state`로 전달

## Implementation

    Future<CertTokenInfo> certLoginWithKakaoTalk({
      List<Prompt>? prompts,
      required String state,
      List<String>? channelPublicIds,
      List<String>? serviceTerms,
      String? nonce,
    }) async {
      var codeVerifier = AuthCodeClient.codeVerifier();

      String? stateToken;
      String? redirectUrl;
      if (kIsWeb) {
        stateToken = generateRandomString(20);
        redirectUrl = await AuthCodeClient.instance.platformRedirectUri();
      }

      final authCode = await AuthCodeClient.instance.authorizeWithTalk(
        redirectUri: redirectUrl,
        prompts: prompts,
        state: state,
        channelPublicId: channelPublicIds,
        serviceTerms: serviceTerms,
        codeVerifier: codeVerifier,
        nonce: nonce,
        stateToken: stateToken,
        webPopupLogin: true,
      );
      final certTokenInfo = await AuthApi.instance.issueAccessTokenWithCert(
          authCode: authCode, codeVerifier: codeVerifier);
      await TokenManagerProvider.instance.manager.setToken(certTokenInfo.token);
      return certTokenInfo;
    }