loginWithOidc static method
Future<LoginSession>
loginWithOidc({
- required OidcProviderType type,
- required String authorizationUrl,
Implementation
static Future<LoginSession> loginWithOidc({
required OidcProviderType type,
required String authorizationUrl,
}) async {
// validate redirect url
if (_redirectUrl.isEmpty) {
throw Exception("redirect url is empty");
} else if ((kIsWeb && Uri.tryParse(_redirectUrl) == null)) {
throw Exception("redirect url is invalid");
}
await HeraExtenstion.redirect(Uri.parse(authorizationUrl));
if (kIsWeb) {
return LoginSession()..loginStatus = LoginStatus.NOT_AUTHENTICATED;
}
final Completer<Uri> completer = Completer<Uri>();
_sub = linkStream.listen((String? uri) async {
if (uri.toString().startsWith(_redirectUrl)) {
if (Platform.isIOS || Platform.isAndroid || Platform.isFuchsia) {
await closeInAppWebView();
}
completer.complete(Uri.parse(uri!));
}
});
Uri responseUrl = await completer.future;
_sub?.cancel();
HeraRequest req = HeraRequest()..namespace = _namespace;
req.oidcProvider = OidcProvider()..type = type;
String? accessToken = responseUrl.queryParameters["access_token"];
String? refreshToken = responseUrl.queryParameters["access_token"];
String? userId = responseUrl.queryParameters["user_id"];
if ((accessToken ?? "") == "" || (refreshToken ?? "") == "") {
throw Exception(
"user id, access or refresh token is null. Contact info@nuntio.io");
}
if (userId == "") {
throw Exception("user is null. Contact info@nuntio.io");
}
var response = await _heraClient
.get(HeraRequest(authToken: AuthToken(userToken: accessToken)));
_setCurrentUser(response.user);
_setAccessToken(accessToken!);
_setRefreshToken(refreshToken!);
onAuthenticated();
return LoginSession()..loginStatus = LoginStatus.AUTHENTICATED;
}