mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
feat: cookie login
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -2,7 +2,11 @@ import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:PiliPalaX/common/constants.dart';
|
||||
import 'package:PiliPalaX/http/init.dart';
|
||||
import 'package:PiliPalaX/utils/extension.dart';
|
||||
import 'package:PiliPalaX/utils/storage.dart';
|
||||
import 'package:PiliPalaX/utils/utils.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -16,6 +20,7 @@ class LoginPageController extends GetxController
|
||||
final TextEditingController usernameTextController = TextEditingController();
|
||||
final TextEditingController passwordTextController = TextEditingController();
|
||||
final TextEditingController smsCodeTextController = TextEditingController();
|
||||
final TextEditingController cookieTextController = TextEditingController();
|
||||
|
||||
Rx<Map<String, dynamic>> codeInfo = Rx<Map<String, dynamic>>({});
|
||||
|
||||
@@ -40,7 +45,7 @@ class LoginPageController extends GetxController
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
tabController = TabController(length: 3, vsync: this)
|
||||
tabController = TabController(length: 4, vsync: this)
|
||||
..addListener(_handleTabChange);
|
||||
}
|
||||
|
||||
@@ -54,6 +59,7 @@ class LoginPageController extends GetxController
|
||||
usernameTextController.dispose();
|
||||
passwordTextController.dispose();
|
||||
smsCodeTextController.dispose();
|
||||
cookieTextController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
@@ -197,6 +203,50 @@ class LoginPageController extends GetxController
|
||||
captcha.startCaptcha(registerData);
|
||||
}
|
||||
|
||||
// cookie登录
|
||||
void loginByCookie() async {
|
||||
if (cookieTextController.text.isEmpty) {
|
||||
SmartDialog.showToast('cookie不能为空');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
dynamic result = await Request().get(
|
||||
"https://api.bilibili.com/x/member/web/account",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Cookie": cookieTextController.text,
|
||||
},
|
||||
),
|
||||
);
|
||||
if (result.data['code'] == 0) {
|
||||
try {
|
||||
await Utils.afterLoginByApp(
|
||||
{'mid': '${result.data['data']['mid']}'},
|
||||
{
|
||||
'cookies':
|
||||
cookieTextController.text.split(';').toList().map((item) {
|
||||
List list = item.split('=').toList();
|
||||
return {
|
||||
'name': list.firstOrNull,
|
||||
'value': list.getOrNull(1),
|
||||
};
|
||||
}).toList()
|
||||
},
|
||||
);
|
||||
if (GStorage.isLogin) {
|
||||
Get.back();
|
||||
}
|
||||
} catch (e) {
|
||||
SmartDialog.showToast("登录失败: $e");
|
||||
}
|
||||
} else {
|
||||
SmartDialog.showToast("哔哩哔哩登录已失效,请重新登录");
|
||||
}
|
||||
} catch (e) {
|
||||
SmartDialog.showToast("获取哔哩哔哩用户信息失败,可前往账号管理重试");
|
||||
}
|
||||
}
|
||||
|
||||
// app端密码登录
|
||||
void loginByPassword() async {
|
||||
String username = usernameTextController.text;
|
||||
|
||||
@@ -148,6 +148,49 @@ class _LoginPageState extends State<LoginPage> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget loginByCookie() {
|
||||
return Column(
|
||||
children: [
|
||||
const SizedBox(height: 20),
|
||||
const Text('使用Cookie登录'),
|
||||
const SizedBox(height: 10),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||
child: Text(
|
||||
'使用App端Api实现的功能将不可用',
|
||||
style: Theme.of(context).textTheme.labelMedium!.copyWith(
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
|
||||
child: TextField(
|
||||
minLines: 1,
|
||||
maxLines: 10,
|
||||
controller: _loginPageCtr.cookieTextController,
|
||||
inputFormatters: [FilteringTextInputFormatter.deny(RegExp(r"\s"))],
|
||||
decoration: InputDecoration(
|
||||
prefixIcon: const Icon(Icons.cookie_outlined),
|
||||
border: const UnderlineInputBorder(),
|
||||
labelText: 'Cookie',
|
||||
suffixIcon: IconButton(
|
||||
onPressed: _loginPageCtr.cookieTextController.clear,
|
||||
icon: const Icon(Icons.clear),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
OutlinedButton.icon(
|
||||
onPressed: _loginPageCtr.loginByCookie,
|
||||
icon: const Icon(Icons.login),
|
||||
label: const Text('登录'),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget loginByPassword() {
|
||||
return Column(
|
||||
children: [
|
||||
@@ -450,7 +493,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||
Tab(
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [Icon(Icons.sms), Text(' 短信')],
|
||||
children: [Icon(Icons.sms_outlined), Text(' 短信')],
|
||||
),
|
||||
),
|
||||
Tab(
|
||||
@@ -459,6 +502,12 @@ class _LoginPageState extends State<LoginPage> {
|
||||
children: [Icon(Icons.qr_code), Text(' 扫码')],
|
||||
),
|
||||
),
|
||||
Tab(
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [Icon(Icons.cookie_outlined), Text(' Cookie')],
|
||||
),
|
||||
),
|
||||
],
|
||||
controller: _loginPageCtr.tabController,
|
||||
))
|
||||
@@ -468,8 +517,9 @@ class _LoginPageState extends State<LoginPage> {
|
||||
? TabBar(
|
||||
tabs: const [
|
||||
Tab(icon: Icon(Icons.password), text: '密码'),
|
||||
Tab(icon: Icon(Icons.sms), text: '短信'),
|
||||
Tab(icon: Icon(Icons.sms_outlined), text: '短信'),
|
||||
Tab(icon: Icon(Icons.qr_code), text: '扫码'),
|
||||
Tab(icon: Icon(Icons.cookie_outlined), text: 'Cookie'),
|
||||
],
|
||||
controller: _loginPageCtr.tabController,
|
||||
)
|
||||
@@ -491,6 +541,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||
tabViewOuter(loginByPassword()),
|
||||
tabViewOuter(loginBySmS()),
|
||||
tabViewOuter(loginByQRCode()),
|
||||
tabViewOuter(loginByCookie()),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user