From 66fadb84aadb8e998ddc878d9b78c96809836c08 Mon Sep 17 00:00:00 2001 From: "HYUNGU, KANG" Date: Mon, 13 Jul 2020 11:36:56 +0900 Subject: [PATCH 1/4] feat: added updateScopes to android --- .../kakaologins/RNKakaoLoginsModule.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/android/src/main/java/com/dooboolab/kakaologins/RNKakaoLoginsModule.java b/android/src/main/java/com/dooboolab/kakaologins/RNKakaoLoginsModule.java index 93050b3..f52c82f 100644 --- a/android/src/main/java/com/dooboolab/kakaologins/RNKakaoLoginsModule.java +++ b/android/src/main/java/com/dooboolab/kakaologins/RNKakaoLoginsModule.java @@ -32,6 +32,7 @@ import com.kakao.auth.AuthType; import com.kakao.auth.ISessionCallback; +import com.kakao.auth.AccessTokenCallback; import com.kakao.auth.KakaoSDK; import com.kakao.auth.Session; import com.kakao.network.ErrorResult; @@ -351,6 +352,35 @@ public void onSuccess(Long result) { } }); } + + @ReactMethod + private void updateScopes(final ReadableArray scopes, final Promise promise) { + List targetScopes = new ArrayList(); + for (Object scopeObj : scopes.toArrayList()) { + String scope = scopeObj.toString(); + targetScopes.add(scope); + } + + Session.getCurrentSession().updateScopes(reactContext.getCurrentActivity(), targetScopes, new AccessTokenCallback() { + @Override + public void onAccessTokenReceived(AccessToken accessToken) { + WritableMap result = Arguments.createMap(); + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + result.putString("accessToken", Session.getCurrentSession().getTokenInfo().getAccessToken()); + result.putString("refreshToken", Session.getCurrentSession().getTokenInfo().getRefreshToken()); + result.putString("accessTokenExpiresAt", transFormat.format(Session.getCurrentSession().getTokenInfo().accessTokenExpiresAt())); + result.putString("refreshTokenExpiresAt", transFormat.format(Session.getCurrentSession().getTokenInfo().refreshTokenExpiresAt())); + + promise.resolve(result); + } + + @Override + public void onAccessTokenFailure(ErrorResult errorResult) { + promise.reject(String.valueOf(errorResult.getErrorCode()), errorResult.getErrorMessage(), errorResult.getException()); + } + }); + } public static class SessionCallback implements ISessionCallback { From 3dd98c9519c9f3a58066784e1208d8450ecf4c3f Mon Sep 17 00:00:00 2001 From: "HYUNGU, KANG" Date: Tue, 14 Jul 2020 18:34:18 +0900 Subject: [PATCH 2/4] feat: added updateScopes to ios --- ios/RNKakaoLogins/RNKakaoLogins.m | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ios/RNKakaoLogins/RNKakaoLogins.m b/ios/RNKakaoLogins/RNKakaoLogins.m index 6962b8f..1b8ca86 100644 --- a/ios/RNKakaoLogins/RNKakaoLogins.m +++ b/ios/RNKakaoLogins/RNKakaoLogins.m @@ -155,4 +155,35 @@ - (dispatch_queue_t)methodQueue }]; } +RCT_EXPORT_METHOD(updateScopes:(NSArray*) scopes + resolver:(RCTPromiseResolveBlock) resolve + rejecter:(RCTPromiseRejectBlock) reject) +{ + KOSession* session = [KOSession sharedSession]; + + [session updateScopes: scopes + completionHandler: ^(NSError *error) { + if (error) { + RCTLogInfo(@"Error=%@", error); + reject(getErrorCode(error), error.localizedDescription, error); + } else { + [session openWithCompletionHandler:^(NSError *error) { + if ([session isOpen]) { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; + + resolve(@{@"accessToken": session.token.accessToken, + @"refreshToken": session.token.refreshToken, + @"accessTokenExpiresAt": [formatter stringFromDate: session.token.accessTokenExpiresAt], + @"refreshTokenExpiresAt": [formatter stringFromDate: session.token.refreshTokenExpiresAt], + @"scopes": session.token.scopes}); + } else { + RCTLogInfo(@"Error=%@", error); + reject(getErrorCode(error), error.localizedDescription, error); + } + }]; + } + }]; +} + @end From b9f625919650f68a44484fc90cc00d4222959229 Mon Sep 17 00:00:00 2001 From: "HYUNGU, KANG" Date: Tue, 14 Jul 2020 18:46:32 +0900 Subject: [PATCH 3/4] feat: added updateScopes to index.ts --- index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/index.ts b/index.ts index 11c431b..5edbcd1 100644 --- a/index.ts +++ b/index.ts @@ -164,11 +164,36 @@ export function unlink(callback?: ICallback): Promise { }); } +/** + * updateScopes + * @param {Array} scopes request scopes + * @param {ICallback} [callback] callback function + * @returns {Promise} + */ +export function updateScopes(scopes: Array, callback?: ICallback): Promise { + return RNKakaoLogins.updateScopes(scopes) + .then((result) => { + if (isFunction(callback)) { + callback(null, result); + } + + return result; + }) + .catch((error) => { + if (isFunction(callback)) { + callback(error, null); + } + + throw error; + }); +} + const KakaoLogins = { login, logout, getProfile, unlink, + updateScopes }; export default KakaoLogins; From 4698f6d7df743a473578b7180283523be4fdc793 Mon Sep 17 00:00:00 2001 From: "HYUNGU, KANG" Date: Tue, 14 Jul 2020 19:07:59 +0900 Subject: [PATCH 4/4] docs(readme): updated updateScopes method --- README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7f1a290..5d952e8 100644 --- a/README.md +++ b/README.md @@ -221,14 +221,15 @@ ex: `Xo8WBi6jzSxKDVR4drqm84yr9iU=` #### Methods (callback is optional) -| Func | Param | Return | Description | -| :--------- | :--------------------------------------: | :-------------: | :--------------- | -| login | `callback? (err: Error, result: Object)` | Promise{Object} | 로그인 | -| getProfile | `callback? (err: Error, result: Object)` | Promise{Object} | 프로필 불러오기 | -| logout | `callback? (err: Error, result: String)` | Promise{String} | 로그아웃 | -| unlink | `callback? (err: Error, result: String)` | Promise{String} | 연결끊기 | - -#### params in result when `login` +| Func | Param | Return | Description | +| :--------- | :--------------------------------------: | :-------------: | :--------------- | +| login | `callback? (err: Error, result: Object)` | Promise{Object} | 로그인 | +| getProfile | `callback? (err: Error, result: Object)` | Promise{Object} | 프로필 불러오기 | +| logout | `callback? (err: Error, result: String)` | Promise{String} | 로그아웃 | +| unlink | `callback? (err: Error, result: String)` | Promise{String} | 연결끊기 | +| updateScopes| `callback? (err: Error, result: String)` | Promise{Object} | 추가 권한 요청 | + +#### params in result when `login` and `updateScopes` - version > 1.3.8