name27 / flutter

0 stars 0 forks source link

구글 로그인 #117

Open name27 opened 1 year ago

name27 commented 1 year ago

Firebase 설정/프로젝트 설정/일반/내 앱/디지털 지문 추가

키 생성

C:\Users\c\.android>keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000

C:\Users\c\.android>keytool -genkey -v -keystore release.keystore -alias androidreleasekey -keyalg RSA -keysize 2048 -validity 10000

키 조회

C:\Users\c\.android>keytool -list -v -keystore debug.keystore -alias androiddebugkey

C:\Users\c\.android>keytool -list -v -keystore release.keystore -alias androidreleasekey

디지털 지문 추가

SHA1 키 등록 SHA256 키 등록

SDK 안내 보기 클릭 - 그대로 따라한다

image

name27 commented 1 year ago

image image image image

main.dart

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:login_test/controller/auth_controller.dart';
import 'package:login_test/firebase_options.dart';
import 'package:login_test/page/login_page.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      initialBinding: BindingsBuilder(() {
        Get.put(AuthController());
      }),
      home: const LoginPage(),
    );
  }
}

auth_controller.dart

import 'package:firebase_auth/firebase_auth.dart';
import 'package:get/get.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:login_test/page/login_page.dart';
import 'package:login_test/page/main_page.dart';

class AuthController extends GetxController {
  final Rxn<User> user = Rxn<User>();

  User? get userr => user.value;
//구글 로그인
  signInWithGoogle() async {
    // Trigger the authentication flow
    final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();

    // Obtain the auth details from the request
    final GoogleSignInAuthentication? googleAuth =
        await googleUser?.authentication;

    // Create a new credential
    final credential = GoogleAuthProvider.credential(
      accessToken: googleAuth?.accessToken,
      idToken: googleAuth?.idToken,
    );

    // Once signed in, return the UserCredential
    return await FirebaseAuth.instance.signInWithCredential(credential);
  }

  signout() async {
    await GoogleSignIn().signOut();
    FirebaseAuth.instance.signOut();
  }

  @override
  void onInit() {
    super.onInit();
    FirebaseAuth.instance.authStateChanges().listen((value) {
      user(value);
      if (value != null) {
        Get.to(() => const MainPage());
      } else {
        print('로그아웃');
        Get.to(() => const LoginPage());
      }
    });
  }
}

login_page.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:login_test/controller/auth_controller.dart';

class LoginPage extends GetView<AuthController> {
  const LoginPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: controller.signInWithGoogle,
          child: const Text('구글 로그인'),
        ),
      ),
    );
  }
}

main_page.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:login_test/controller/auth_controller.dart';

class MainPage extends GetView<AuthController> {
  const MainPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
            child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Text(controller.userr!.email ?? ''),
        ElevatedButton(
          onPressed: controller.signout,
          child: const Text('로그아웃'),
        ),
      ],
    )));
  }
}