# Google2FA
[](https://packagist.org/packages/pragmarx/google2fa) [](LICENSE) [](https://packagist.org/packages/pragmarx/google2fa) [](https://travis-ci.org/antonioribeiro/google2fa) [](https://scrutinizer-ci.com/g/antonioribeiro/google2fa/?branch=master) [](https://styleci.io/repos/24296182)
### Google Two-Factor Authentication for PHP Package
Google2FA is a PHP implementation of the Google Two-Factor Authentication Module, supporting the HMAC-Based One-time Password (HOTP) algorithm specified in [RFC 4226](https://tools.ietf.org/html/rfc4226) and the Time-based One-time Password (TOTP) algorithm specified in [RFC 6238](https://tools.ietf.org/html/rfc6238).
This package is agnostic, but there's a [Laravel bridge](https://github.com/antonioribeiro/google2fa-laravel).
## Demos, Example & Playground
Please check the [Google2FA Package Playground](https://pragmarx.com/google2fa).

Here's an demo app showing how to use Google2FA: [google2fa-example](https://github.com/antonioribeiro/google2fa-example).
You can scan the QR code on [this (old) demo page](https://antoniocarlosribeiro.com/technology/google2fa) with a Google Authenticator app and view the code changing (almost) in real time.
## Requirements
- PHP 5.4+
## Installing
Use Composer to install it:
composer require pragmarx/google2fa
If you prefer inline QRCodes instead of a Google generated url, you'll need to install [BaconQrCode](https://github.com/Bacon/BaconQrCode):
composer require "bacon/bacon-qr-code":"~1.0"
## Using It
#### Instantiate it directly
```php
use PragmaRX\Google2FA\Google2FA;
$google2fa = new Google2FA();
return $google2fa->generateSecretKey();
```
## How To Generate And Use Two Factor Authentication
Generate a secret key for your user and save it:
```php
$user->google2fa_secret = $google2fa->generateSecretKey();
```
Show the QR Code to your user:
```php
$google2fa_url = $google2fa->getQRCodeGoogleUrl(
'YourCompany',
$user->email,
$user->google2fa_secret
);
/// and in your view:
```
And they should see and scan the QR code to their applications:

And to verify, you just have to:
```php
$secret = $request->input('secret');
$valid = $google2fa->verifyKey($user->google2fa_secret, $secret);
```
## QR Code Packages
This package suggests the use of Bacon/QRCode because it is known as a good QR Code package, but you can use it with any other package, for instance [Simple QrCode](https://www.simplesoftware.io/docs/simple-qrcode), which uses Bacon/QRCode to produce QR Codes.
Usually you'll need a 2FA URL, so you just have to use the URL generator:
```php
$google2fa->getQRCodeUrl($companyName, $companyEmail, $secretKey)
```
Here's an example using Simple QrCode:
```php
Scan me to return to the original page.