Skip to main content

Laravel 5.2 Multi Authentication

Today I wasted almost 3 hours to search on internet about Multi Authentication in Laravel 5.2. I have gone though laracast's post and other few forums too, I was still not able to find any solution for it. Their were packages such as sboo/multiauth, ollieread/multiauth, kbweb/multiauth etc. yet was not satisfied with their solutions, I tried to use them a lot but very soon I got stuck with bugs.

Finally after a long research I finally found out a great solution for it, i found it on a frequent website I visit for my solution of any coding problems, and the solution was really shocking for me that it required no package installation or any other kinda stuff. It's already included with Laravel 5.2.

Thanks to Hasmukh Tank a stack overflow user, he made a beautiful step by step procedure to do that.
Here are those procedures:
Refer Url : How to use multi Auth in laravel 5.2

1. First we create two models

1) user, 2)admin


2. Update the config/auth.php file:


return [
    'defaults' => [
        'guard' => 'user',
        'passwords' => 'user',
    ],

    'guards' => [
        'user' => [
            'driver' => 'session',
            'provider' => 'user',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],
    ],
    'providers' => [
        'user' => [
            'driver' => 'eloquent',
            'model' => 'App\User',
        ],
        'admin' => [
            'driver' => 'eloquent',
            'model' => 'App\Admin',
        ],
    ],
    'passwords' => [
        'user' => [
            'provider' => 'user',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admin' => [
            'provider' => 'admin',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ]
    ]
];



3. Now modify the app/Http/kernel.php file


    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class
    ];

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class      
        ],
        'api' => [
            'throttle:60,1',
        ],
    ];


4. Create LoginController and set below code in it.

Note: You have to create login pages for 'user' as well as 'admin'. And submit login form requests to appropriate controller function i.e. userLogin() or adminLogin().



namespace App\Http\Controllers;

use Auth, Input;
use App\User;
use App\Admin;

class LoginController extends Controller
{
    public function userLogin(){
        $input = Input::all();
        if(count($input) > 0){
            $auth = auth()->guard('user');

            $credentials = [
                'email' =>  $input['email'],
                'password' =>  $input['password'],
            ];

            if ($auth->attempt($credentials)) {
                return redirect()->action('LoginController@profile');
            } else {
                echo 'Error';
            }
        } else {
            return view('user.login');
        }
    }

    public function adminLogin(){
        $input = Input::all();
        if(count($input) > 0){
            $auth = auth()->guard('admin');

            $credentials = [
                'email' =>  $input['email'],
                'password' =>  $input['password'],
            ];

            if ($auth->attempt($credentials)) {
                 return redirect()->action('LoginController@profile');                     
            } else {
                echo 'Error';
            }
        } else {
            return view('admin.login');
        }
    }

    public function profile(){
        if(auth()->guard('admin')->check()){
             pr(auth()->guard('admin')->user()->toArray());
        }         
        if(auth()->guard('user')->check()){
            pr(auth()->guard('user')->user()->toArray());
        } 
    }
}

Comments

  1. Indefined index:password is coming
    ErrorException in EloquentUserProvider.php line 122: Undefined index: password

    ReplyDelete

Post a Comment

Popular posts from this blog

Free Cloud Server | Get A Free Cloud Server | Amazon AWS

Hello Developer | Reader | Creator | Explorer! I was going through cloud servers on Internet, as it becomes very difficult to manage everything on shared hosting. Amazon AWS is one of the providers of cloud services, which has a scheme of pay as you use. Amazon AWS includes a lot many web servirces like, Api Gateway, SNS(Mobile Messaging), S3(Strorage), etc. AWS has almost all those reuirements which a developer would require. And also the best part is Amazon AWS gives 12 months free access to its web services. In this post we will discuss about creating an Account on Amazon AWS and setting up with cloud on EC2 (a service of amazon aws which provides cloud computing). Amazon EC2 cloud computing, that includes a public ip and a free domain(domain would be somthing like ec2-bla-bla.bla-bla.amazonaws.com) Follow these steps to create Amazon Account:- Create a amazon AWS account go here  https://aws.amazon.com/  on top left click on sign in to console. After doing t

Redirect Non-www to www and vice versa | Non www to www | www to Non-www

You have a website say example.com, you want it only to be accessed by www.example.com, instead of both example.com & www.example.com or you may want your domain to be only accessed by example.com instead of both example.com & www.example.com. What is www and why should I redirect to my preferred domain?  Well here's the answer: Www is actually a subdomain of your domain. www actually refers to [world wide web] hmm! well than why redirect? The best answer is both the domains might have same content i.e. yourdomain.com and www.yourdomain.com, and its not very good to the search engine bots. What should I choose? www or non-www domain? This is completly depended upon you and the name of your domain. Sometimes domains are quite good without www for example https://letsencrypt.org . The domain with or without www does'nt effects search engine optimization (SEO). 1. Redirect your website from non-www to www  i.e. example.com to www.example.com Configure your ngin