Implement native web auth
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter_web_auth/flutter_web_auth.dart';
|
||||
import 'package:thingsboard_app/constants/app_constants.dart';
|
||||
import 'package:thingsboard_app/core/auth/web/tb_web_auth.dart';
|
||||
import 'package:thingsboard_app/core/context/tb_context.dart';
|
||||
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
|
||||
import 'package:crypto/crypto.dart';
|
||||
@@ -49,9 +49,9 @@ class TbOAuth2Client {
|
||||
params['pkg'] = pkgName;
|
||||
params['appToken'] = appToken;
|
||||
url = url.replace(queryParameters: params);
|
||||
final result = await FlutterWebAuth.authenticate(
|
||||
final result = await TbWebAuth.authenticate(
|
||||
url: url.toString(),
|
||||
callbackUrlScheme: ThingsboardAppConstants.thingsboardOAuth2CallbackUrlScheme);
|
||||
callbackUrlScheme: ThingsboardAppConstants.thingsboardOAuth2CallbackUrlScheme, saveHistory: false);
|
||||
final resultUri = Uri.parse(result);
|
||||
final error = resultUri.queryParameters['error'];
|
||||
if (error != null) {
|
||||
|
||||
40
lib/core/auth/web/tb_web_auth.dart
Normal file
40
lib/core/auth/web/tb_web_auth.dart
Normal file
@@ -0,0 +1,40 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/services.dart' show MethodChannel;
|
||||
|
||||
class _OnAppLifecycleResumeObserver extends WidgetsBindingObserver {
|
||||
final Function onResumed;
|
||||
|
||||
_OnAppLifecycleResumeObserver(this.onResumed);
|
||||
|
||||
@override
|
||||
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||
if (state == AppLifecycleState.resumed) {
|
||||
onResumed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TbWebAuth {
|
||||
static const MethodChannel _channel = const MethodChannel('tb_web_auth');
|
||||
|
||||
static final _OnAppLifecycleResumeObserver _resumedObserver = _OnAppLifecycleResumeObserver(() {
|
||||
_cleanUpDanglingCalls();
|
||||
});
|
||||
|
||||
static Future<String> authenticate({required String url, required String callbackUrlScheme, bool? saveHistory}) async {
|
||||
WidgetsBinding.instance?.removeObserver(_resumedObserver); // safety measure so we never add this observer twice
|
||||
WidgetsBinding.instance?.addObserver(_resumedObserver);
|
||||
return await _channel.invokeMethod('authenticate', <String, dynamic>{
|
||||
'url': url,
|
||||
'callbackUrlScheme': callbackUrlScheme,
|
||||
'saveHistory': saveHistory,
|
||||
}) as String;
|
||||
}
|
||||
|
||||
static Future<void> _cleanUpDanglingCalls() async {
|
||||
await _channel.invokeMethod('cleanUpDanglingCalls');
|
||||
WidgetsBinding.instance?.removeObserver(_resumedObserver);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user