Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon What are the steps to replace Google Authenticator with Authy in Laravel Fortify
    Laravel CSRF


What are the steps to replace Google Authenticator with Authy in Laravel Fortify


To replace Google Authenticator with Authy in Laravel Fortify, you can follow these steps:

1. Install the Authy PHP SDK:

bash
composer require twilio/authy-php

2. Implement the `TwoFactorAuthenticatable` trait in your `User` model:

php
use Laravel\Fortify\TwoFactorAuthenticatable;
use Authy\AuthyApi;

class User extends Authenticatable
{
    use TwoFactorAuthenticatable;

    /**
     * Get the user's Authy secret.
     *
     * @return string
     */
    public function getAuthySecretKey()
    {
        return $this->two_factor_secret;
    }

    /**
     * Set the user's Authy secret.
     *
     * @param  string  $secret
     * @return void
     */
    public function setAuthySecretKey($secret)
    {
        $this->two_factor_secret = $secret;
    }
}

3. Configure the Authy API client in your `FortifyServiceProvider`:

php
use Laravel\Fortify\Fortify;
use Authy\AuthyApi;

public function boot()
{
    Fortify::twoFactorAuthentication(function ($request, $user) {
        $authyApi = new AuthyApi(config('services.authy.api_key'));

        if ($user->two_factor_secret) {
            $isValid = $authyApi->verifyToken($user->getAuthySecretKey(), $request->input('code'));

            if ($isValid->ok()) {
                return true;
            }
        }

        return false;
    });

    Fortify::twoFactorChallengeView(function () {
        return view('auth.two-factor-challenge');
    });
}

In this example, the `twoFactorAuthentication` method uses the Authy API client to verify the TOTP code entered by the user. The `twoFactorChallengeView` method specifies the view that should be displayed when the user needs to enter the TOTP code.

4. Implement the two-factor authentication management UI:

Create a view where users can enable or disable two-factor authentication using Authy. This view should make a POST request to the `/user/two-factor-authentication` endpoint to toggle the 2FA setting.

html
<form method="POST" action="/user/two-factor-authentication">
    @csrf

    @if (auth()->user()->two_factor_secret)
        <button type="submit" name="disable" class="btn btn-danger">
            Disable Two-Factor Authentication
        </button>
    @else
        <button type="submit" name="enable" class="btn btn-success">
            Enable Two-Factor Authentication
        </button>
    @endif
</form>

By following these steps, you can replace Google Authenticator with Authy for two-factor authentication in your Laravel Fortify application. Users will be able to use the Authy app instead of Google Authenticator to generate TOTP codes.

Remember to configure your Authy API key in the `config/services.php` file:

php
'authy' => [
    'api_key' => env('AUTHY_API_KEY'),
],

Citations:
[1] https://www.elegantlaravel.com/article/multi-guard-authentication-with-laravel-fortify
[2] https://stackoverflow.com/questions/68750862/add-2fa-or-otp-via-e-mail-to-laravel-fortify-2fa-via-authenticator-app
[3] https://laravel.com/docs/11.x/fortify
[4] https://www.youtube.com/watch?v=vZxB-57o2pg
[5] https://codecourse.com/watch/authentication-with-laravel-fortify/two-factor-authentication-laravel-fortify