nuwira/bandrek

Bandrek is password recovery token generation using number as code for Laravel 5.4.x based.

1.1.1 2018-03-06 00:57 UTC

This package is auto-updated.

Last update: 2021-10-21 13:28:36 UTC


README

Build Status Total Download Latest Stable Version

Bandrek is local word in Javanese that means a lock pick. We use lock pick to open a padlock if the key is lost.

Bandrek replaces Laravel's password recovery manager to provide code and token when requesting password recovery. This code can be used as token replacement if you are using REST-API to reset password without visiting web interface.

Bandrek generate 6 random numeric character as code. Bandrek is also creating 64 characters token that can be used in normal web page interface.

The scenario is when user request password recovery via REST-API, the user can send the credentials (e-mail and password) and the easy readable code to reset the password.

Installation

Bandrek only supports Laravel 5.4 and above. To install using Composer, just run this command below.

composer require nuwira/bandrek

Configuration

Config File

After installed, open config/app.php and find this line.

Illuminate\Auth\Passwords\PasswordResetServiceProvider::class

Comment or remove it and add that line to override Laravel's password reset handling.

Nuwira\Bandrek\BandrekServiceProvider::class

Add Facade

This is optional. To add Facade, add config/app.php in the aliases section.

'Bandrek' => Nuwira\Bandrek\BandrekFacade::class,

If Facade is loaded, you can call these functions

Bandrek::getRandomCode($length = 6, $toString = true);
Bandrek::generateToken();
Bandrek::getTokenFromCode($code);
Bandrek::getCodeFromToken($token, $toString = true);

Model File

To be able to send reset password instruction e-mail, open app/User.php (the user model file) and find this line.

use Illuminate\Foundation\Auth\User as Authenticatable;

Replace that line with this.

use Nuwira\Bandrek\Auth\User as Authenticatable;

Using Custom Notification

Bandrek by default is using e-mail for notification. You can add or replace using your preferred method by extending abstract class Nuwira\Bandrek\Notification\BandrekNotification. The token and code are available in $this->code and $this->token in the notification class.

For example, if you want to send the code using Gammu SMS notification, just install and configure it.

To use SMS and e-mail for code sending, add function in your model that extends Nuwira\Bandrek\Auth\User and inject the notification.

Notification File: App\Notifications\ResetPassword.php

namespace App\Notifications;

use Nuwira\Bandrek\Notification\BandrekNotification;
use Illuminate\Notifications\Messages\MailMessage;
use NotificationChannels\Gammu\GammuChannel;
use NotificationChannels\Gammu\GammuMessage;

class ResetPassword extends BandrekNotification
{
    public function via($notifiable)
    {
        return ['mail', GammuChannel::class];
    }
    
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url(config('app.url').route('password.reset', $this->token, false)))
            ->line('If you did not request a password reset, no further action is required.');
    }
    
    public function toGammu($notifiable)
    {
        return (new GammuMessage())
            ->to($phoneNumber)
            ->content('To reset password, use this code: '.$this->code);
    }
}

Model File: App\User.php

namespace App;

use Nuwira\Bandrek\Auth\User as BaseUser;
use App\Notifications\ResetPassword as ResetPasswordNotification;

class User extends BaseUser
{
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new ResetPasswordNotification($token));
    }
}

License

The MIT License (MIT). Please see License File for more information.