[flutter]#1 firebase - Anonymous Login

giyeon·2021년 5월 3일
1

flutter-firebase

목록 보기
1/10
post-thumbnail

#이 포스팅은 플린이의 입장에서 쓰여진 글입니다. 코드 지적은 언제나 환영입니다. 🙆🏻‍♂️

'이 프로젝트는 'Youtube The net ninja'의 flutter firebase tutorial 강의를 참고했습니다.'


firebase ios 초기설정은 마친 상태로 출발해요


Firebase Auth

기본적인 구조는 아래와 같습니다.
My App에서 user의 Login 상태를 확인하고, 그에 따른 Screen을 띄워요.
Auth에서의 기능은 대표적으로 로그인, 회원가입, 로그아웃이 있어요.
로그인은 익명로그인, email과 password를 통한 로그인 두가지를 해볼거에요.
회원가입은 email, password를 받아올거고,
로그아웃은 말그대로 로그아웃!

차근차근 해볼게요.

main method

firebase를 사용하기위해 가장 먼저 해야할 일이 있어요.
main method에 firebase를 사용하겠다고 알려줘야해요.

firebasecore를 import하고, 아래와 같이 main을 설정해요.

maid.dart

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

AuthService class

auth.dart 파일에 class를 하나 만들어줘요.

class AuthService {} 

AuthService class 내부에는 Firebase 인증과 관련된 모든 것이 들어가요.

이제 class 내부에 FirebaseAuth를 인스턴스화 해줘요.
이 인스턴스로 로그인, 회원가입, 로그아웃 등 거의 모든것을 해요.

final Firebase _auth = FirebaseAuth.instance;

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  /* Sign In anon */

  /* Sign In with email & password */

  /* Sign Up with email & password */

  /* Sign Out*/

}

firebase login setting


로그인과정을 위해 firebase authentication에서 이메일/비밀번호와, 익명 로그인을 '사용설정됨'으로 활성화 시켜줘요.

Anonymous Login 익명 로그인

이제 class 내부에 익명로그인을 위한 signInAnon method를 만들어볼게요.

  /* Sign In anon */
  Future signInAnon() async {
    try {
      UserCredential result = await _auth.signInAnonymously();
      User user = result.user;
      return user;
    } catch (e) {
      print(e.toString());
      return null;
    }
  }

firebase에서 제공하는 signInAnonymously() method는 Future<'UserCredential>을 반환하기 때문에
Future로 설정해줘요. result로 UserCredential를 받아요. 이 UserCredential 타입인 result에는 많은 정보가 들어있어요.

console에 print로 찍어보면 아래와 같이 나와요.

이 많은 정보 모두는 필요없고, 필요한 정보들만 쏙쏙 뽑아서 사용하면 돼요.
그 중에서 User class가 들어있는 user 는 꼭 필요한 정보라서 user변수로 받을게요.

user.dart 내부에 UserModel class를 만들어서 저 User class의 uid를 받아볼게요.

class UserModel {
  final String uid;

  UserModel({this.uid});
}

AuthService class내부에 Firebase User class 의 uid 값을 우리가 만든 UserModel의 uid 에 저장하는 method를 만들어요.
null값을 return 한다면 사용자가 로그인상태가 아니거나, 로그아웃을 한 상태에요.


  // create user obj based on FirebaseUser
  UserModel _userFromFirebaseUser(User user) {
    return user != null ? UserModel(uid: user.uid) : null;
  }

이 method를 사용하기위해 signInAnon method를 조금 수정해요.

  /* Sign In anon */
  Future signInAnon() async {
    try {
      UserCredential result = await _auth.signInAnonymously();
      User user = result.user;
      return _userFromFirebaseUser(user);
    } catch (e) {
      print(e.toString());
      return null;
    }
  }

이제 거의 다 끝났어요.
Login Screen에서 Sign in Anon 버튼을 클릭하면 signInAnon() method를 트리거 하도록 할게요.
우선 Login Screen에서 AuthService class를 인스턴스화 하고,

  final AuthService _auth = AuthService();

이 _auth를 사용해서 우리가만든 signInAnon method를 불러올게요.

RaisedButton(
          child: const Text('Sign in anon'),
          onPressed: () async {
            dynamic result = await _auth.signInAnon();
            if (result == null) {
              print('@@ error signing in');
            } else {
              print('@@ signed in');
              print(result); // return Instance of UserModel
              print(result.uid); // return uid value in UserModel class
            }
          },
        )

끝났어요. 버튼을 클릭하면 console 창에 아래와 같은 정보가 떠요.
화면 전환만 안될 뿐 익명 로그인이 된거나 마찬가지에요.

profile
Web , App developer wannabe 🧑🏻‍💻

0개의 댓글