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함수를 써줬다.