Skip to content

Commit

Permalink
Merge pull request #26 from Mockin-2024/25-logout
Browse files Browse the repository at this point in the history
logout
  • Loading branch information
KimHyeokMin0 authored Dec 16, 2024
2 parents d888006 + 7ea856c commit 29b58a9
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 24 deletions.
15 changes: 8 additions & 7 deletions lib/login/login.dart
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,14 @@ class _LoginState extends State<Login> {
PasswordInput(name: 'password', tec: password),
const SizedBox(height: 30),
SignupButton(
tt: '로그인',
signUpFunction: LoginService.touchLoginButton(
email: email.text,
password: password.text,
context: context,
),
),
tt: '로그인',
signUpFunction: () async {
await LoginService.touchLoginButton(
email: email.text,
password: password.text,
context: context,
);
}),
const SizedBox(height: 20),
const TextGestureNavigator(movePage: SignUp(), name: '회원가입'),
const SizedBox(height: 10),
Expand Down
38 changes: 21 additions & 17 deletions lib/service/login_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:mockin/api/login_api.dart';
import 'package:mockin/dto/login/login_dto.dart';
import 'package:mockin/dto/login/token_validation_dto.dart';
import 'package:mockin/login/info_register.dart';
import 'package:mockin/service/setting_service.dart';
import 'package:mockin/storage/jwt_token.dart';
import 'package:mockin/storage/user_email.dart';
import 'package:mockin/widgets/etc/alert.dart';
Expand All @@ -14,22 +15,25 @@ class LoginService {
static Future<void> isCanAutoLogin({
required BuildContext context,
}) async {
// 마지막으로 접속한 이메일
var lastEmail = await JwtToken().read('lastEmail');
if (lastEmail != null) {
// 그 이메일의 토큰이 있는지 확인
var token = await JwtToken().read(lastEmail);
if (token != null) {
var rst = await isTokenValid(email: lastEmail, token: token);
if (rst[0] != '') {
// 토큰이 유효하면 자동 로그인
if (!context.mounted) return;
autoLogin(
email: lastEmail,
token: rst[0],
rst: rst,
context: context,
);
var auto = await SettingService.getAutoLogin();
if (auto) {
// 마지막으로 접속한 이메일
var lastEmail = await JwtToken().read('lastEmail');
if (lastEmail != null) {
// 그 이메일의 토큰이 있는지 확인
var token = await JwtToken().read(lastEmail);
if (token != null) {
var rst = await isTokenValid(email: lastEmail, token: token);
if (rst[0] != '') {
// 토큰이 유효하면 자동 로그인
if (!context.mounted) return;
autoLogin(
email: lastEmail,
token: rst[0],
rst: rst,
context: context,
);
}
}
}
}
Expand Down Expand Up @@ -102,7 +106,7 @@ class LoginService {
return '';
}

static touchLoginButton({
static Future<void> touchLoginButton({
required String email,
required String password,
required BuildContext context,
Expand Down
42 changes: 42 additions & 0 deletions lib/service/setting_service.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import 'package:flutter/material.dart';
import 'package:mockin/login/login.dart';
import 'package:mockin/storage/jwt_token.dart';
import 'package:mockin/storage/user_email.dart';

class SettingService {
static void logout({
required BuildContext context,
}) async {
await JwtToken().delete('lastEmail');
await JwtToken().delete(UserEmail().getEmail()!);
if (!context.mounted) return;
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => const Login(),
),
);
}

static Future<bool> getAutoLogin() async {
var rst = await JwtToken().read('autoLogin') ?? '';
if (rst == '') {
await JwtToken().save('autoLogin', 'false');
return false;
}
if (rst == 'false') {
return false;
} else {
return true;
}
}

static Future<void> setAutoLogin() async {
var rst = await JwtToken().read('autoLogin');
if (rst == 'false') {
await JwtToken().save('autoLogin', 'true');
} else {
await JwtToken().save('autoLogin', 'false');
}
}
}
9 changes: 9 additions & 0 deletions lib/stocks/stock_how_invest.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:mockin/widgets/settings/logout.dart';
import 'package:mockin/widgets/settings/set_auto_login.dart';
import 'package:mockin/widgets/text/title_text.dart';
import 'package:mockin/widgets/text/content_text.dart';
import 'package:mockin/widgets/text/category_text.dart';
Expand Down Expand Up @@ -85,6 +87,13 @@ class StockHowInvest extends StatelessWidget {
ContentText(tt: '100주 (±10%)\n'),
CategoryText(tt: '- 호치민'),
ContentText(tt: '100주 (±7%)\n'),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Logout(),
SetAutoLogin(),
],
)
],
),
),
Expand Down
16 changes: 16 additions & 0 deletions lib/widgets/settings/logout.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
import 'package:mockin/service/setting_service.dart';
import 'package:mockin/widgets/signup/signup_button.dart';

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

@override
Widget build(BuildContext context) {
return SignupButton(
tt: '로그아웃',
signUpFunction: () async {
SettingService.logout(context: context);
});
}
}
46 changes: 46 additions & 0 deletions lib/widgets/settings/set_auto_login.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
import 'package:mockin/service/setting_service.dart';
import 'package:mockin/widgets/text/category_text.dart';

class SetAutoLogin extends StatefulWidget {
const SetAutoLogin({super.key});

@override
State<SetAutoLogin> createState() => _SetAutoLoginState();
}

class _SetAutoLoginState extends State<SetAutoLogin> {
var auto = false;

@override
void initState() {
super.initState();
curAutoLogin();
}

void curAutoLogin() async {
final rst = await SettingService.getAutoLogin();
setState(() {
auto = rst;
});
}

@override
Widget build(BuildContext context) {
return Column(
children: [
const CategoryText(tt: '자동로그인'),
IconButton(
onPressed: () async {
SettingService.setAutoLogin();
setState(() {
auto = !auto;
});
},
icon: auto
? const Icon(Icons.check_box_outlined)
: const Icon(Icons.check_box_outline_blank_outlined)),
],
);
}
}

0 comments on commit 29b58a9

Please sign in to comment.