Auth.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import React, {useState, useEffect} from 'react';
  2. import { LoginButton, AccessToken, LoginManager } from 'react-native-fbsdk';
  3. import RNKakao from 'react-native-kakao';
  4. import { NaverLogin, getProfile } from 'react-native-naver-login';
  5. import { GoogleSignin, GoogleSigninButton, statusCodes } from 'react-native-google-signin';
  6. import AsyncStorage from '@react-native-community/async-storage';
  7. import C from 'rn-class'
  8. C.addColor("#03cf5d", "color-naver");
  9. GoogleSignin.configure({});
  10. const initials = {
  11. kConsumerKey: 'VWv4bOdB5Bf07a26eJ5h',
  12. kConsumerSecret: 'pBASnpI7X5',
  13. kServiceAppName: 'empty',
  14. kServiceAppUrlScheme: 'naverorgseonsujoaemptyapp', // only for iOS
  15. };
  16. class Lm {
  17. logout = async ()=>{
  18. let result = await LoginManager.logOut();
  19. try {
  20. await GoogleSignin.revokeAccess();
  21. await GoogleSignin.signOut();
  22. } catch (error) {
  23. console.log(error)
  24. }
  25. result = await RNKakao.logout();
  26. result = await NaverLogin.logout();
  27. AsyncStorage.removeItem("@naverToken");
  28. AsyncStorage.removeItem("@terms" );
  29. return true;
  30. }
  31. }
  32. const LM = new Lm()
  33. export {
  34. LM
  35. }
  36. export default (props)=>{
  37. let callLogin = async (bfirst)=>{
  38. let rtn = {type : null, token : null, id : null };
  39. let fbData = await AccessToken.getCurrentAccessToken(); // 페이스북
  40. if (fbData){
  41. rtn.type = "facebook"
  42. rtn.id = fbData.userID;
  43. rtn.token = fbData.accessToken;
  44. props.onLogin && props.onLogin(rtn, bfirst);
  45. return;
  46. }
  47. if(await GoogleSignin.isSignedIn()){
  48. try {
  49. rtn.type = "google";
  50. rtn.token = (await GoogleSignin.getTokens()).accessToken;
  51. rtn.id = (await GoogleSignin.getCurrentUser()).user.id;
  52. props.onLogin && props.onLogin(rtn, bfirst);
  53. return;
  54. } catch (error) {}
  55. }
  56. let naverToken = await AsyncStorage.getItem("@naverToken");
  57. if(naverToken){
  58. let profile = await getProfile(naverToken);
  59. if(profile.resultcode =='00') {
  60. rtn.type = "naver";
  61. rtn.id = profile.response.id;
  62. rtn.token = naverToken;
  63. props.onLogin && props.onLogin(rtn, bfirst);
  64. return ;
  65. }
  66. }
  67. try {
  68. const kakaoData = await RNKakao.userInfo();
  69. if (kakaoData){
  70. rtn.type = "kakao"
  71. rtn.id = kakaoData.id;
  72. rtn.token = kakaoData.accessToken;
  73. props.onLogin && props.onLogin(rtn, bfirst);
  74. return ;
  75. }
  76. } catch (error) {}
  77. }
  78. useEffect(()=>{
  79. callLogin();
  80. // console.log(dd);
  81. },[])
  82. // event fild
  83. let facebookLogin = async () =>{
  84. const result = await LoginManager.logInWithPermissions(['public_profile']);
  85. if(result ){
  86. callLogin(true);
  87. }
  88. }
  89. let googoleSignIn = async () =>{
  90. GoogleSignin.configure();
  91. try {
  92. if(await GoogleSignin.hasPlayServices()){
  93. const result = await GoogleSignin.signIn();
  94. if(result){
  95. callLogin(true);
  96. }
  97. }
  98. } catch (error) {
  99. if (error.code === statusCodes.SIGN_IN_CANCELLED) {
  100. // user cancelled the login flow
  101. console.log('cancel',error);
  102. } else if (error.code === statusCodes.IN_PROGRESS) {
  103. // operation (f.e. sign in) is in progress already
  104. console.log('progress',error);
  105. } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
  106. // play services not available or outdated
  107. console.log('service not available',error);
  108. } else {
  109. // some other error happened
  110. console.log(error)
  111. }
  112. }
  113. }
  114. let kakaoLogin = async () =>{
  115. const result = await RNKakao.login();
  116. if(result ){
  117. callLogin(true);
  118. }
  119. props.onlogin && props.onlogin({type : "kakao", id : result.id , token : accessToken }, true);
  120. }
  121. let naverLogin = async () =>{
  122. NaverLogin.login(initials, async (err, token) => {
  123. await AsyncStorage.setItem("@naverToken", token);
  124. if(token){
  125. callLogin(true);
  126. }
  127. });
  128. }
  129. return (
  130. <C.View cls="jc-sa flx1">
  131. <C.EL.Button btncls="bgc-color-facebook" title="Facebook" onPress={facebookLogin} />
  132. <C.EL.Button btncls="bgc-color-google-plus " title="Google" onPress={googoleSignIn} />
  133. <C.EL.Button btncls="bgc-color-kakao " tcls="color-kakaotext" title="Kakao" onPress={kakaoLogin}/>
  134. <C.EL.Button btncls="bgc-color-naver " title="Naver" onPress={naverLogin} />
  135. </C.View>
  136. )
  137. }