flutter(dart)

[flutter] shared_preferences 이용한 자동 로그인

칠구의 스터디 2024. 4. 24. 16:00

https://nanifood.tistory.com/35

 

[flutter] flask 서버를 이용한 로그인 , 회원가입

파이썬 - 회원가입 및 로그인 코드 from flask import Flask, jsonify, request from flask_sqlalchemy import SQLAlchemy from flask_cors import CORS app = Flask(__name__) CORS(app) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' db = SQ

nanifood.tistory.com

이번에는 저번에 로그인/회원가입에 이어서 자동 로그인 기능을 구현하겠다.

사실 저번에 필요한 부분은 다 세팅을 해놔서 의외로 쉽게 구현할 수 있었다

 

<코드 부분- dart> login.dart
@override
  Widget build(BuildContext context) {
    // 앱 시작 시 자동 로그인 시도
    autoLogin(context);

    return MaterialApp(
      theme: ThemeData(
.....


// 자동 로그인
  Future<void> autoLogin(BuildContext context) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;
    if (isLoggedIn) {
      String? authToken = prefs.getString('authToken');
      if (authToken != null) {
        // 토큰이 유효한지 확인하고 사용자 정보 가져오기
        final isValid = await _validateToken(authToken);
        if (isValid) {
          // 유효한 경우 사용자 정보 가져오기
          await fetchUserInfo(authToken);
          // 홈 화면으로 이동
          Navigator.pushReplacement(
            context,
            MaterialPageRoute(
              builder: (context) => const MainpageApp(),
            ),
          );
          return;
        } else {
          // 토큰이 만료된 경우 로그아웃 처리
          await logout(context);
        }
      }
    }
  }

  // 로그아웃
  Future<void> logout(BuildContext context) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isLoggedIn', false);
    await prefs.remove('authToken');
    // 로그인 페이지로 이동
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => LoginApp(),
      ),
    );
  }

 

일단 앱이 시작되면 자동 로그인이 실행되도록 위젯 빌드에 autoLogin(context);를 추가하였다.

그 다음 유효한 토큰인지 확인하고 맞으면 자동 로그인을 도와주는 autoLogin함수

토큰이 유효하지 않으면 로그아웃을 시키는 logout함수를 써줬다.