mariojgt/castle

Simple and easy 2 steps verification integration

Installs: 66

Dependents: 2

Suggesters: 0

Security: 0

Stars: 1

Watchers: 1

Forks: 0

Open Issues: 0

Language:CSS

Type:laravel

2.0.8 2024-02-26 14:59 UTC

This package is auto-updated.

Last update: 2024-03-26 16:30:30 UTC


README

Logo

Castle

This Laravel package help you quickly add 2fa authentication in you existing application, simular to google authentication.

Features

  • Demo with the example application flow you need.
  • 2 steps autentication.
  • middleware protection.

Badges

MIT License version

Installation

Install my-project with composer

  composer require mariojgt/castle
  php artisan install::castle

Usage/Examples

1: You need to assign the trait to you user model table in order to use the 2steps verification and have access to the backup codes.

use Mariojgt\Castle\Trait\Castle;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, Castle;

    /**
     * The attributes that are mass assignable.
     *
     * @var string[]
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

this will insure you have access to the backup codes

2: In order to sync the user you need to first generate the authenticator secret using the helper normally when you register or with a controller method to sync the authenticator

use Mariojgt\Castle\Helpers\AuthenticatorHandle;

class myController
{
    public register () {
	    // Start the class that handle most of the logic
	    $handle = new AuthenticatorHandle();
	    // Generate the code
		$codeInfo =	    $handle->generateCode($userEmail);
		// Sync that code with the user using the trait
		Auth()->user()->syncAuthenticator($codeInfo['secret']);
    }

3: At this point the authenticator is enabled against that user, now you need to protect the middleware here is a example

// Auth Route Example
Route::group([
    'middleware' => ['web', '2fa'], // note you can use (2fa:admin) for admin guard or leave empty for web as default
], function () {
    // Example page required to be login
    Route::get('/castle-try', [HomeContoller::class, 'protected'])->name('castle.try');
});

4: Display the user codes, normaly you only display the backup codes once you can use the following example

Auth()->user()->getCodes; // this will return the backup codes for that user

5: using backup codes see the example

use Mariojgt\Castle\Helpers\AuthenticatorHandle;

myclass {

	public myFunction () {
		 // Start the class that handle most of the logic
		$handle = new AuthenticatorHandle();
		// the encryption is using the normal laravel encrypt fuction // example encrypt('user_secret')
		$handle->useBackupCode($codeYouType, $encryptauthenticatorSecret); // The second parameter is not required
	}

}

Tech Stack

Client: TailwindCSS, vuejs, blade

Server: 2fa, Laravel