laravel 5.4中的两种不同的身份验证模型 [英] Two different models for authentication in laravel 5.4

查看:91
本文介绍了laravel 5.4中的两种不同的身份验证模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有两个不同的模型和表,分别命名为usercompany.

Suppose I have two different models and tables named user and company.

您知道laravel使用User模型来管理身份验证.但是因为我有两个不同的模型,所以我希望可以分别管理它们.

As you know laravel uses User model to manage Authentication. but beacause I have two different model I want can manage them separately.

我正在使用laravel 5.4,但我不知道该怎么办.

I'm using laravel 5.4 and I do not know how can do that.

推荐答案

如果您正在谈论多重身份验证系统,则必须创建多个防护措施来实现.

If you are talking about multiple authentication system, then you have to create multiple guards to achieve that.

对这个问题有很好的答案.

There is nice answer to the same question.

谁能用示例解释Laravel 5.2 Multi Auth

它在Laravel 5.2上,但是可以在Laravel 5.4上轻松实现.

It's on Laravel 5.2, but it can be easily implemented on Laravel 5.4.

  1. 创建扩展可认证类的模型 App \ Company .此模型将用作用户模型,将由公司保护(在下一步中)

  1. Create a model App\Company which extends Authenticatable Class. This model will work as user model which will company guard (in the next step)

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Company extends Authenticatable
{

    use Notifiable;

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

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

}

  • 为模型 App \ Company 创建警卫和提供者.

  • Create an guard and a provider for model App\Company.

    // Authenticating guards and providers
    
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        'company' => [
            'driver' => 'session',
            'provider' => 'company',
        ],
    ],
    
    // Providers 
    
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'company' => [
            'driver' => 'eloquent',
            'model' => App\Company::class,
        ]
    ],
    

  • 现在您可以根据不同的警卫来找到用户.

    Now you can find user according to the different guards.

    $user = Auth::guard('company')->user();
    // Or...
    $user = auth()->guard('company')->user();
    dd($user);
    

    1. 现在为公司 App \ Http \ Controllers \ Auth \ CompanyLoginController 创建与 Auth \ LoginController 相同的Auth控制器. 指定 $ redirectTo 后卫

    1. Now create Auth controller for Company App\Http\Controllers\Auth\CompanyLoginController same as Auth\LoginController. Specify $redirectTo and guard

    //Auth\ComapnyLoginController.php
    
    protected $redirectTo = '/comapany';
    protected $guard = 'comapany';
    
    public function showLoginForm()
    {
        if (view()->exists('auth.authenticate')) {
            return view('auth.authenticate');
        }
    
        return view('comapany.auth.login');
    }
    

    现在为用户创建登录表单-company.auth.login视图与用户的登录表单相同.

    now create login form for user - company.auth.login view same as user's login form.

    1. 现在创建路线

    1. Now create routes

    //Login Routes...
    Route::group(['prefix'=>'company', 'middleware'=>'company'], function(){
        Route::get('/login','Auth\CompanyLoginController@showLoginForm');
        Route::post('/login','Auth\CompanyLoginController@login');
        // ...
        // rest of the company dashboard and other links
        // ...
        Route::get('/logout','Auth\CompanyLoginController@logout');
    });
    

  • 为公司创建中间件

  • Create a middleware for company

    class RedirectIfNotCompany
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @param  string|null  $guard
         * @return mixed
         */
        public function handle($request, Closure $next, $guard = 'company')
        {
            if (!Auth::guard($guard)->check()) {
                return redirect('/');
            }
    
            return $next($request);
        }
    }
    

    并将其注册到kernal.php

    and register it to kernal.php

    protected $routeMiddleware = [
        'company' => \App\Http\Middleware\RedirectIfNotCompany::class,
    ];
    

  • 这就是您所需要的. 以警卫的名义访问用户

    And thats all you need. Access user by the name of guard

    Auth::guard('company')->user()
    

    这篇关于laravel 5.4中的两种不同的身份验证模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆