github_oauth 0.0.2 copy "github_oauth: ^0.0.2" to clipboard
github_oauth: ^0.0.2 copied to clipboard

Effortlessly add GitHub login to your app for secure and seamless authentication.

GitHub OAuth for Flutter #

github_oauth is a Flutter package that simplifies the process of integrating GitHub OAuth authentication into your app. With this package, you can provide a seamless GitHub sign-in experience, handle token exchanges, and authenticate users securely.

Features #

  • Complete OAuth2 Flow: Handles the entire GitHub OAuth process, from user login to token retrieval.
  • Customizable UI: Customize the sign-in page title and WebView configuration to match your app's branding.
  • WebView Integration: Provides a native WebView for a smooth sign-in experience.
  • Secure Token Handling: Retrieve and manage GitHub access tokens securely.
  • Comprehensive Error Handling: Manage errors throughout the OAuth process.

Installation #

Add github_oauth to your pubspec.yaml:

dependencies:
  github_oauth: latest_version

Then run flutter pub get to install the package.

Usage #

1. Setup GitHub OAuth App #

To use GitHub OAuth, you need to set up an OAuth app on GitHub. Follow these steps:

  1. Go to GitHub Developer Settings.
  2. Register a new OAuth application.
  3. Set your app's redirect URI (e.g., yourapp://callback).

2. Configure GitHubSignIn #

Import the package and initialize GitHubSignIn with your GitHub OAuth credentials. Use the dotenv package to manage sensitive information:

import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:github_oauth/github_oauth.dart';

final gitHubSignIn = GitHubSignIn(
  clientId: dotenv.env['GITHUB_CLIENT_ID']!,
  clientSecret: dotenv.env['GITHUB_CLIENT_SECRET']!,
  redirectUrl: dotenv.env['GITHUB_REDIRECT_URL']!,
);

3. Sign In with GitHub #

Call the signIn method to trigger the OAuth flow:

void _signInWithGitHub(BuildContext context) async {
  final result = await gitHubSignIn.signIn(context);

  if (result.status == GitHubSignInResultStatus.ok) {
    // Successfully signed in
    print("Access Token: ${result.token}");
    print("User Profile: ${result.userProfile}");
  } else {
    // Handle error
    print("Sign In Failed: ${result.errorMessage}");
  }
}

4. Customize WebView #

You can customize the WebView used during the sign-in process by passing additional parameters to GitHubSignInPage:

GitHubSignInPage(
  url: 'authorization-url',
  redirectUrl: 'redirect-url',
  title: 'Sign in with GitHub',
  userAgent: 'Custom User Agent',
  clearCache: true,
);

Example #

Here's a complete example of how to use the github_oauth package:

import 'package:flutter/material.dart';
import 'package:github_oauth/github_oauth.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';

void main() async {
  await dotenv.load();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SignInPage(),
    );
  }
}

class SignInPage extends StatelessWidget {
  final GitHubSignIn githubSignIn = GitHubSignIn(
    clientId: dotenv.env['GITHUB_CLIENT_ID']!,
    clientSecret: dotenv.env['GITHUB_CLIENT_SECRET']!,
    redirectUrl: dotenv.env['GITHUB_REDIRECT_URL']!,
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('GitHub OAuth Example')),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            final result = await githubSignIn.signIn(context);

            if (result.status == GitHubSignInResultStatus.ok) {
              // Successfully signed in
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Token: ${result.token}')),
              );
            } else {
              // Error handling
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Error: ${result.errorMessage}')),
              );
            }
          },
          child: Text('Sign in with GitHub'),
        ),
      ),
    );
  }
}

Error Handling #

The GitHubSignInResult includes status and error messages, which can help you handle various scenarios:

if (result.status == GitHubSignInResultStatus.ok) {
  // Successfully signed in
} else if (result.status == GitHubSignInResultStatus.cancelled) {
  // User cancelled the sign-in process
} else {
  // Sign-in failed
  print('Error: ${result.errorMessage}');
}

Contribution #

Contributions are welcome! If you find a bug or have an idea for a new feature, feel free to open an issue or submit a pull request.

License #

This package is licensed under the MIT License. See the LICENSE file for more details.

9
likes
130
points
106
downloads

Publisher

verified publisherxusanboy.uz

Weekly Downloads

Effortlessly add GitHub login to your app for secure and seamless authentication.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

dio, flutter, flutter_dotenv, mockito, test, url_launcher, webview_flutter

More

Packages that depend on github_oauth