authorize method Null safety
사용자가 앱에 로그인할 수 있도록 인가 코드를 요청하는 함수입니다. 인가 코드를 받을 수 있는 서버 개발이 필요합니다.
Implementation
Future<String> authorize({
String? clientId,
String? redirectUri,
List<String>? scopes,
String? agt,
List<String>? channelPublicIds,
List<String>? serviceTerms,
List<Prompt>? prompts,
String? loginHint,
String? state,
String? codeVerifier,
String? nonce,
bool webPopupLogin = false,
}) async {
final finalRedirectUri = redirectUri ?? "kakao${_platformKey()}://oauth";
String? codeChallenge = codeVerifier != null
? base64.encode(sha256.convert(utf8.encode(codeVerifier)).bytes)
: null;
final params = {
Constants.clientId: clientId ?? _platformKey(),
Constants.redirectUri: finalRedirectUri,
Constants.responseType: Constants.code,
// "approval_type": "individual",
Constants.scope: scopes?.join(" "),
Constants.agt: agt,
Constants.channelPublicId: channelPublicIds?.join(','),
Constants.serviceTerms: serviceTerms?.join(','),
Constants.prompt: state == null
? (prompts == null ? null : _parsePrompts(prompts))
: _parsePrompts(_makeCertPrompts(prompts)),
Constants.loginHint: loginHint,
Constants.state: state,
Constants.codeChallenge: codeChallenge,
Constants.codeChallengeMethod:
codeChallenge != null ? Constants.codeChallengeMethodValue : null,
Constants.kaHeader: await KakaoSdk.kaHeader,
Constants.nonce: nonce,
};
params.removeWhere((k, v) => v == null);
final url =
Uri.https(KakaoSdk.hosts.kauth, Constants.authorizePath, params);
SdkLog.i(url);
try {
final authCode = await launchBrowserTab(
url,
redirectUri: finalRedirectUri,
popupOpen: webPopupLogin,
);
return _parseCode(authCode);
} catch (e) {
SdkLog.e(e);
rethrow;
}
}