User Authentication Identifiers for Laravel

Fund package maintenance!

v2.4.0 2019-08-26 03:00 UTC

This package is auto-updated.

Last update: 2020-04-27 22:40:41 UTC


Build Status Latest Stable Version Total Downloads Latest Unstable Version License Coverage Status

Imagine you need to login a user with either "email", "username" or "phone number" just like how Facebook allows it. This is not possible with Laravel since you're limited to only one unique username/identifier key. This package attempt to solve the issue by allowing to use a unified key "identifier" and you can customize which attributes Laravel should check during authentication.


To install through composer, run the following command from terminal:

composer require "laravie/authen"


Service Provider

First you can attach the auth provider on App\Providers\AuthServiceProvider:


namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravie\Authen\BootAuthenProvider;

class AuthServiceProvider extends ServiceProvider
    use BootAuthenProvider;

     * Register any authentication / authorization services.
     * @return void
    public function boot()


User Model

Secondly, you need to update the related App\User (or the eloquent model mapped for auth).


namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Authen\AuthenUser;

class User extends Authenticatable
    use Notifiable, AuthenUser;

     * Get the name of the unique identifier for the user.
     * @return array
    public function getAuthIdentifiersName()
        return ['email', 'username', 'phone_number'];

With this setup, you can now check either email, username or phone_number during authentication.


Lastly, you need to update the config config/auth.php:


return [

    // ...

    'providers' => [
        'users' => [
            'driver' => 'authen',
            'model'  => App\User::class,

    // ...


Here's an example how to login.


use Illuminate\Support\Facades\Auth;
use Laravie\Authen\Authen;

$data = [Authen::getIdentifierName() => '', 'password' => 'foobar'];

if (Auth::attempt($data)) {
    // you can logged in, you can also pass your phone number of username to `identifier`.