UNPKG

react-oauth2

Version:

![npm](https://img.shields.io/npm/v/react-oauth2) ![GitHub](https://img.shields.io/github/license/maxifjaved/react-oauth2) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/react-oauth2) ![npm type definitions](https://img.shields.io/npm/types

210 lines (165 loc) 6.29 kB
# React OAuth2 Social Login ![npm](https://img.shields.io/npm/v/react-oauth2) ![GitHub](https://img.shields.io/github/license/maxifjaved/react-oauth2) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/react-oauth2) ![npm type definitions](https://img.shields.io/npm/types/react-oauth2) A modern, lightweight React component library for implementing OAuth2 social login buttons (Google, Facebook) with TypeScript support. Zero dependencies, fully customizable, and built with security in mind. ## Features - 🚀 Modern React 18+ and TypeScript support - 🎨 Customizable button designs following provider guidelines - 🔒 Secure OAuth2 implementation - 📦 Tiny bundle size (~5KB minified + gzipped) - 🌐 Support for multiple providers (Google, Facebook) - 💫 Built-in loading and error states - ⚡ Zero external dependencies - 🔥 Popup-based authentication flow - 📱 Mobile-responsive design ## Installation ```bash # npm npm install react-oauth2 # yarn yarn add react-oauth2 # pnpm pnpm add react-oauth2 ``` ## Quick Start ```tsx import { FacebookOauth2, GoogleOauth2 } from 'react-oauth2'; function App() { const handleCallback = (error: Error, response: OAuthResponse) => { if (error) { // Handle error return; } const {profile} = response; // Handle successful login }; return ( <div> <GoogleOauth2 clientId="your-google-client-id" clientSecret="your-google-client-secret" redirectUri="http://localhost:3000/auth/google/callback" scope={['openid', 'email', 'profile']} callback={handleCallback} > Continue with Google </GoogleOauth2> <FacebookOauth2 clientId="your-facebook-client-id" clientSecret="your-facebook-client-secret" redirectUri="http://localhost:3000/auth/facebook/callback" scope="email,public_profile" callback={handleCallback} > Continue with Facebook </FacebookOauth2> </div> ); } ``` ## OAuth Provider Setup ### Google Setup 1. Go to the [Google Cloud Console](https://console.cloud.google.com/) 2. Create a new project or select an existing one 3. Navigate to APIs & Services > Credentials 4. Click "Create Credentials" > "OAuth 2.0 Client ID" 5. Configure your OAuth consent screen 6. Add authorized redirect URIs 7. Copy your Client ID and Client Secret ### Facebook Setup 1. Go to [Facebook Developers](https://developers.facebook.com/) 2. Create a new app or select an existing one 3. Add the Facebook Login product 4. Configure OAuth settings 5. Add your redirect URI 6. Copy your App ID and App Secret ## API Reference ### GoogleButton Props | Prop | Type | Required | Description | |------|-------------------------------------------------|----------|-------------| | clientId | string | Yes | Your Google OAuth 2.0 client ID | | clientSecret | string | Yes | Your Google OAuth 2.0 client secret | | redirectUri | string | Yes | The URI to redirect to after authentication | | scope | string[] | No | Array of permission scopes | | callback | (error: Error, response: OAuthResponse) => void | Yes | callback | | className | string | No | Custom CSS class | | style | CSSProperties | No | Custom styles | | children | ReactNode | Yes | Button content | ### FacebookButton Props | Prop | Type | Required | Description | |------|------|----------|-------------| | clientId | string | Yes | Your Facebook App ID | | clientSecret | string | Yes | Your Facebook App Secret | | redirectUri | string | Yes | The URI to redirect to after authentication | | scope | string | No | Comma-separated permission scopes | | callback | (error: Error, response: OAuthResponse) => void | Yes | callback | | className | string | No | Custom CSS class | | style | CSSProperties | No | Custom styles | | children | ReactNode | Yes | Button content | ## Advanced Usage ### Custom Styling ```tsx <GoogleButton className="custom-google-button" style={{ backgroundColor: '#4285f4', color: 'white', padding: '12px 24px', borderRadius: '4px', }} > <GoogleIcon className="custom-icon" /> Sign in with Google </GoogleButton> ``` ### Environment Variables ```typescript // .env REACT_APP_GOOGLE_CLIENT_ID=your-google-client-id REACT_APP_GOOGLE_CLIENT_SECRET=your-google-client-secret REACT_APP_FACEBOOK_CLIENT_ID=your-facebook-client-id REACT_APP_FACEBOOK_CLIENT_SECRET=your-facebook-client-secret ``` ### TypeScript Usage ```typescript import type {OAuthResponse, OAuthError} from 'react-oauth2'; const handleCallback = (error: Error, response: OAuthResponse) => { if (error) { // Handle error return; } const {profile} = response; // Handle successful login }; ``` ## Source Code The full source code for this package is available on [GitHub](https://github.com/maxifjaved/react-oauth2). ## Security Considerations - Never expose your client secrets in client-side code - Use environment variables for sensitive data - Implement proper CSRF protection - Validate OAuth responses on your backend - Use HTTPS for all OAuth endpoints - Regularly rotate your client secrets ## Browser Support - Chrome (latest) - Firefox (latest) - Safari (latest) - Edge (latest) - iOS Safari (latest) - Android Chrome (latest) ## Contributing We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details. 1. Fork the repository 2. Create your feature branch 3. Commit your changes 4. Push to the branch 5. Create a Pull Request ## License MIT © maxifjaved ## Keywords react, oauth, oauth2, social-login, google-login, facebook-login, react-component, typescript, authentication, social-authentication, google-oauth, facebook-oauth, react18, social-media-login, oauth2-client, react-oauth, social-signin, google-signin, facebook-signin, react-social-login --- Made with ❤️ by [@maxifjaved](https://maxifjaved.com)