Search packages, repositories and app categories

Package detailsv0.2.9

oauth_dio

A customizable oauth client with token storage and interceptors for dio

AndroidiOSWebmacOSWindowsLinux
30-day downloads
537
Likes
58
Pub points
150

Install package

flutter pub add oauth_dio

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

oauth_dio is a customizable OAuth client for Dart and Flutter applications, built on top of the Dio HTTP client. It provides seamless token management, automatic token refresh, and interceptors to handle authentication flows. The package supports secure token storage and integrates smoothly with existing Dio configurations. Ideal for apps requiring OAuth2 or similar authentication protocols across multiple platforms.

Use cases

  • Integrating OAuth2 login flows
  • Automatically refreshing expired tokens
  • Securing API requests with bearer tokens
  • Handling authentication headers in HTTP calls
  • Building secure REST clients with auth

Key features

  • Token storage and retrieval
  • Automatic token refresh
  • Dio-based interceptors
  • Customizable OAuth configuration
  • Cross-platform support

Suitable for

  • Flutter apps using Dio
  • Applications with OAuth2 authentication
  • Developers needing secure token handling
  • Multi-platform apps requiring consistent auth
  • Projects wanting minimal boilerplate for auth

Considerations

  • Requires Dio to be set up
  • Needs proper token storage setup
  • May require custom logic for complex flows
  • Depends on external OAuth provider
  • Limited to OAuth2-style flows

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

oauth_dio

A customizable oauth client with token storage and interceptors for dio.

Getting Started

Instantiate a new OAuth Client:

// myclient.dart
import 'package:oauth_dio/oauth_dio.dart';

final oauth = OAuth(
      tokenUrl: '<YOUR TOKEN URL>',
      clientId: '<YOUR CLIENT ID>',
      clientSecret: '<YOUR SECRET>');

Obtaining an access token using username and password:

OAuthToken token = oauth.requestTokenAndSave(
  PasswordGrant(
    username: '<YOUR USERNAME>',
    password: '<YOUR PASSWORD>'
  )
).then((token) {
    print(token.accessToken);
});

Updating access token using a refresh token:

OAuthToken token = oauth.requestTokenAndSave(
  RefreshTokenGrant(
    refreshToken: '<YOUR REFRESH TOKEN>'
  )
).then((token) {
    print(token.accessToken);
});

Configuring Dio to send access tokens:

Instantiate a new OAuth Client with a permanent storage, by default oauth is configured with memory storage.

In this example we will use the flutter_secure_storage plugin to store the token on the device's keychain.

// myclient.dart
import 'package:oauth_dio/oauth_dio.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';


class OAuthSecureStorage extends OAuthStorage {
  final FlutterSecureStorage storage = const FlutterSecureStorage();
  final accessTokenKey = 'accessToken';
  final refreshTokenKey = 'refreshToken';
  final tokenExpirationKey = 'tokenExpiration';

  @override
  Future<OAuthToken> fetch() async {
    final expiration = await storage.read(key: tokenExpirationKey);

    return OAuthToken(
        accessToken: await storage.read(key: accessTokenKey),
        refreshToken: await storage.read(key: refreshTokenKey),
        expiration: DateTime.tryParse(expiration.toString()));
  }

  @override
  Future<OAuthToken> save(OAuthToken token) async {
    await storage.write(key: accessTokenKey, value: token.accessToken);
    await storage.write(key: refreshTokenKey, value: token.refreshToken);
    await storage.write(key: tokenExpirationKey, value: token.expiration.toString());

    return token;
  }

  @override
  Future<void> clear() async {
    await storage.delete(key: accessTokenKey);
    await storage.delete(key: refreshTokenKey);
    await storage.delete(key: tokenExpirationKey);
  }
}

final oauth = OAuth(
    tokenUrl: '<YOUR TOKEN URL>',
    clientId: '<YOUR CLIENT ID>',
    clientSecret: '<YOUR SECRET>',
    storage: OAuthSecureStorage()
);

final authenticatedDio = Dio();
authenticatedDio.interceptors.add(BearerInterceptor(oauth));


authenticatedDio.get('/my/protected/resource').then((response) {
    print(response.data);
})

Custom grant types

Use the abstract class OAuthGrantType to implement a custom grant type.

import 'package:oauth_dio/oauth_dio.dart';

class TicketGrant extends OAuthGrantType {
  String accessToken;

  TicketGrant({
    this.accessToken
  })

  @override
  RequestOptions handle (RequestOptions request) {
    request.data = "grant_type=ticket&access_token=$accessToken";
    return request;
  }
}

// Request token using ticket grant
oauth.requestTokenAndSave(
  TicketGrant(
    accessToken: 'foobar'
  )
)

Feedback

Please feel free to give me any feedback helping support this package!

Categories

Dependencies

Dependency list 1 items

Source repository

Projects using this package

No data available yet.